这个问题与我提出的previous question有关,但它有所不同。
我正在使用htaccess来控制登录http://somesite.com/folder
。
登录后,我在folder/index.php
中有php代码,用于检查用于登录的用户名和密码:$_SERVER['PHP_AUTH_USER']
和$_SERVER['PHP_AUTH_PW']
。我将该信息记录到数据库中。
这在用户提供良好的用户名和密码时有效,但是当它不正确时,没有任何反应 - 我想因为永远不会到达/index.php
。
有没有办法登录失败的登录尝试?
答案 0 :(得分:4)
有一种简单的方法可以做到这一点。在.htaccess中,添加
ErrorDocument 401 /path/to/log.php
当登录尝试失败时,将调用此log.php
(您也可以将其置于受保护目录之后,即使登录失败也会到达)。请注意,浏览器不知道某些资源是否需要身份验证,因此您将始终获得第一次尝试的命中。但是,这些尝试不会包含任何用户名,您可以通过检查$_SERVER['PHP_AUTH_USER']
是否为空来检测它们(好吧,您可以将它们与用户输入无用户名,但您明白了)。
嗯,不,正如你所说/index.php
永远不会到达。
你可以做的就是完全不依赖Apache而只使用PHP来处理身份验证。这个manual page向您展示了如何做到这一点。这有一个很大的缺点。假设您保护整个目录。这个目录有PHP文件,图像和诸如此类的东西。现在,要强制执行身份验证,您必须通过PHP文件路由所有内容。如果您只有PHP文件,则可以使用include来完成。如果您有静态满足,则必须通过读取和输出静态内容的PHP文件使用重写规则对其进行路由,这将损害性能。
答案 1 :(得分:1)
如果您的目标是锁定多次失败身份验证的用户,您可以继续使用Apache基本身份验证并安装fail2ban。设置它并忘记它!