登录尝试失败后拒绝apache2访问

时间:2012-06-25 15:23:58

标签: php apache2

4次用户名/密码登录尝试失败后,我想拒绝对服务器的IP访问。我之前通过将IP或块添加到/etc/apache2/httpd.conf文件中拒绝访问Web服务器。

<Location "/">
    Order Allow,Deny
    Allow from all
    Deny from 1.2.3.4/30 3.4.5.6/15
    Deny from 9.4.3.4
</Location>

任何人都知道如何使用PHP以编程方式执行此操作,或者可能在设置的时间间隔内为“IP拒绝列表”安装Apache2查询mysql?

谢谢!

编辑以澄清

在已完成的表单提交上,查询mysql的用户名。如果找到用户名,脚本将继续检查pw,然后再检查登录失败。如果失败的登录计数器&gt; = 4,则用户的帐户被锁定,但他们仍然可以访问服务器。

如果找不到用户名,我查询一个dif。用户IP的表。如果发现IP并且login_counter&gt; = 4使用上面的apache2 httpd.conf方法阻止来自服务器的IP。

* *最终修改/想法

如果我要提供www-data用户权限,我恐怕会打开一个更大的安全漏洞。编辑.htaccess文件,因为没有办法参考。 .htaccess里面的文件是www-data writable,这是我的解决方案。

如果用户名不在db中,则将IP写入db并跟踪每个IP的失败尝试次数。在站点重新访问时,如果IP在db中并且尝试&gt; = 4,则登录脚本die()。接下来,我将编写一个外部脚本(无法通过www-data访问),每天晚上轮询数据库以获取IP,其中尝试&gt; = 4并将它们添加到.htaccess。

1 个答案:

答案 0 :(得分:0)

更新:原来你可以在.htaccess中包含文件,所以我做了一些更改。

所以这里发生的是你拿走.htaccess文件,删除最后一行Allow from all然后添加新的拒绝规则,然后添加删除的行。

您的.htaccess文件将是这样的:

order Deny,Allow
Deny from 9.4.3.4
Allow from all

当用户超过登录尝试时,您执行以下操作:

$file = file('.htaccess');
array_pop($file);
$fh = fopen('.htaccess','w');
fwrite($fh, implode('',$file));
fclose($fh);
$fh = fopen('.htaccess', 'a');
fwrite($fh, 'Deny from '.$_SERVER['REMOTE_ADDR']);
fwrite($fh, 'Allow from all']);
fclose($fh);

嗯,这是基本的想法,您可以接受并自定义它并将其应用到您自己的环境