0

在 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 以编程方式执行此操作,或者可能让 Apache2 以设定的时间间隔查询 mysql 以获取“IP 拒绝列表”?

谢谢!

编辑澄清

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

如果未找到用户名,我会查询差异。用户 IP 表。如果找到 IP 并且 login_counter >=4 使用上面 apache2 httpd.conf 之类的方法阻止来自服务器的 IP。

* *最终编辑/想法

如果我要给 www-data 用户权限,恐怕我会打开一个更大的安全漏洞。编辑 .htaccess 文件,因为没有办法引用。.htaccess 中的一个文件,该文件将是 www-data 可写的,这是我的解决方案。

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

4

1 回答 1

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);

嗯,这就是基本思想,你可以拿来定制,应用到你自己的环境中

于 2012-06-25T15:32:09.930 回答