高级目录保护

时间:2011-09-10 19:07:54

标签: php .htaccess .htpasswd

我有一个脚本,基本上要求用户在进入目录时登录。用户正确验证后,会将其重定向到其子目录。一切正常,但如果他们更改了URL并输入了其他人的子目录,他们就可以访问它。

这是我的.htaccess:

AuthType Basic
AuthName "Restricted Area"
AuthUserFile (path_to)/.htpasswd
Require valid-user
Options +FollowSymlinks
RewriteEngine on
RewriteRule ^(.*)/$ index.php?a=$1
ErrorDocument 404 http://localhost/(path_to)/myfiles/

我的PHP在index.php中:

<?php
//$_SERVER['PHP_AUTH_USER'] = Entered username
//$_SERVER['PHP_AUTH_PW'] = Entered password
if (!isset($_SERVER['PHP_AUTH_USER'])){
    header('WWW-Authenticate: Basic realm="My Realm"');
    header('HTTP/1.0 401 Unauthorized');
    exit;
}
else {
    if($_GET['a']==null){
        header("Location: ".strtolower($_SERVER['PHP_AUTH_USER'])."/");
        echo Hello;
    }
    else{
        if(strtolower($_SERVER['PHP_AUTH_USER'])==strtolower($_GET['a'])){
            echo "welcome, ".$_SERVER['PHP_AUTH_USER'];
            echo "<br/>you accessed ".$_GET['a'];
        }
        else {
            echo "woops, you're not ".$_GET['a']."!";
        }
    }
}
?>

目前,这是有效的。如果你改变了URL,它会说'woops,你不是(坏用户名)',但问题是真正的用户实际上看不到他们自己的东西。就像在Apache中一样,我想查看index.php或目录列表,如果找到文件,但我不知道如何在这里做,必须捕获所有请求并处理它们。

我该怎么做?我完全迷失了:(

我想要发生的事件的示例场景: Person1使用其凭据登录其帐户。他们被带到myfiles / person1,在那里他们可以看到他们的东西。但是,如果Person1将myfiles / person1更改为myfiles / person2,则会出错。

1 个答案:

答案 0 :(得分:0)

我不明白为什么允许用户输入其他用户目录。也许您没有注意到并将其用户名存储在同一个密码文件中。我写了一个快速的示例localy,它工作正常。

Apacha有一些很好的教程,请查看。

然而,我测试的这个例子很快就开始了:

在某个“示例”目录中放置.htaceess

有了这个内容:

AuthName "Please notice! This directory is protected!"
AuthType Basic
AuthUserFile  c:/.htpasswd
<Limit GET POST PUT>
Require valid-user
</Limit>

然后在您的驱动器上(我在Windows上,检查是否需要读取访问权限)将.htpasswd文件与此内容放在一起:

john:smith

然后输入john(用户名)smith(密码)。

对要保护的每个目录执行相同操作,将.htaccess指示给已编译的.htpasswd文件。

这是非常基础的,阅读一些教程以获得更深入的内容。

相关问题