【问题标题】:How about failed attempts for htaccess password protected directories对 htaccess 密码保护目录的尝试失败如何?
【发布时间】:2011-03-11 18:35:36
【问题描述】:

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

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

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

这在用户提供了一个好的用户名和密码时有效,但是当它不正确时,什么都不会发生——我想是因为永远无法到达/index.php

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

【问题讨论】:

    标签: php .htaccess login


    【解决方案1】:

    编辑

    有一个简单的方法来做到这一点。在您的 .htaccess 中,添加

    ErrorDocument 401 /path/to/log.php
    

    然后在登录尝试失败时调用此log.php(您也可以将它放在受保护的目录后面,即使登录失败也会到达)。请注意,浏览器不知道某些资源是否需要身份验证,因此您总是会在第一次尝试时获得成功。但是,这些尝试不会包含任何用户名,您可以通过检查 $_SERVER['PHP_AUTH_USER'] 是否为空来检测它们(好吧,您可以将它们与用户未输入用户名时区分开来,但您明白了)。

    原创

    好吧,不,正如你所说,永远无法到达/index.php

    您可以做的就是完全不依赖 Apache,只使用 PHP 来处理身份验证。这个manual page 向您展示了如何。这有一个很大的缺点。假设您保护了整个目录。这个目录有 PHP 文件、图像和诸如此类的东西。现在,要强制执行身份验证,您必须通过 PHP 文件路由所有内容。如果您只有 PHP 文件,则可以使用包含来完成。如果您有静态内容,则必须通过读取和输出静态内容的 PHP 文件使用重写规则对其进行路由,这将损害性能。

    【讨论】:

    • 我有一个想法,如果我仍然使用 htaccess 保护/folder/,但在外部文件中进行了日志记录,该怎么办。我会将用户定向到受保护文件夹外的check.php。该文件的唯一工作是记录所有尝试(好或坏,实际上check.php 不知道它是好还是坏,因为它只是将其记录到数据库中),然后以编程方式将输入传递给登录框与 htaccess 一起运行。我想要让它工作,我必须以某种方式以编程方式将输入的用户名和密码输入到 htaccess 登录框,这可能吗?
    • @dev 我认为这不会容易得多。最好使用mod_authn_dbd(参见httpd.apache.org/docs/2.2/mod/mod_authn_dbd.html)并使用数据库触发器记录尝试。
    【解决方案2】:

    如果您的目标是锁定多次验证失败的用户,您可以继续使用 Apache 基本身份验证并安装 fail2ban。设置并忘记它!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-10-20
      • 1970-01-01
      • 2010-11-28
      • 2012-10-23
      • 1970-01-01
      • 1970-01-01
      • 2014-06-18
      相关资源
      最近更新 更多