【问题标题】:Secure directory password protection without .htaccess没有 .htaccess 的安全目录密码保护
【发布时间】:2009-05-31 20:30:06
【问题描述】:

我打算使用 .htaccess 密码保护我正在编写的 php 脚本的目录,因为我不相信我的 PHP 技能可以创建安全登录,但我发现你不能使用 AuthUserFile 的相对路径和我无法一概而论。

如果您能指导我使用安全的 PHP 登录脚本来密码保护目录,我将不胜感激。谢谢。

【问题讨论】:

    标签: php directory security password-protection


    【解决方案1】:

    您可以做的一件事是将所有“秘密”文件保存在服务器 webroot 之外的目录中。所有对这些文件的访问都可以通过您目录中的单个 PHP 脚本进行路由。像这样的:

    http://www.example.com/protected-directory/access.php?file=/foo/document.doc

    具有这样的目录结构:

    +--+ /server_root
       |
       +--+ /web_root
       |  |
       |  +--+ /protected-directory
       |     +-- access.php
       |     +-- access-denied.html
       |
       +--+ /protected_root
          |
          +--+ /foo
             +-- document.doc
    

    在您的 access.php 中,您会执行以下操作:

    $file = $_REQUEST['file'];
    if ($user->hasAccessTo($file)) {
        readfile("/server_root/protected_root/$file");
    } else {
        readfile('access-denied.html');
    }
    

    现在,您必须小心,确保没有人使用您的 file 参数并传递 "../../../etc/passwd" 之类的东西。此外,您可能希望确保在上面的示例中发送正确的标头,为了清楚起见,我省略了。

    【讨论】:

      【解决方案2】:

      您可以使用 AuthUserFile 的绝对路径,并安排将该文件放在 Web 服务器无法访问的位置。我已经这样做了很多年了。工作正常。

      【讨论】:

      • 问题是,如果我要分发它,我不知道用户将把脚本放在哪里或他们在什么操作系统上。所以我认为我不能使用 .htaccess?
      • 您仍然可以使用 .htaccess(和 .htpasswd)。默认的 Apache 配置中有规则(至少对于 Apache2)阻止访问任何名为 .ht* 的文件
      猜你喜欢
      • 2011-09-20
      • 2022-01-07
      • 1970-01-01
      • 2013-10-20
      • 1970-01-01
      • 2012-10-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多