如何尝试htaccess密码保护目录失败

时间:2010-07-05 04:54:25

标签: php .htaccess login

这个问题与我提出的previous question有关,但它有所不同。

我正在使用htaccess来控制登录http://somesite.com/folder

登录后,我在folder/index.php中有php代码,用于检查用于登录的用户名和密码:$_SERVER['PHP_AUTH_USER']$_SERVER['PHP_AUTH_PW']。我将该信息记录到数据库中。

这在用户提供良好的用户名和密码时有效,但是当它不正确时,没有任何反应 - 我想因为永远不会到达/index.php

有没有办法登录失败的登录尝试?

2 个答案:

答案 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。设置它并忘记它!