2011-09-10 44 views
1

我有一个脚本,基本上要求用户在进入目录时登录。一旦用户验证正确,它们将被重定向到其子目录。这一切都正常,但如果他们更改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/ 

和我的index.php 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更改我的文件/ person1到myfiles/person2,他们得到一个错误

回答

0

我不明白为什么用户被允许输入其他用户直接访问,也许你没有注意到并将他们的用户名保存在同一密码文件中。写了一个快速的例子本地化,它工作正常。

Apacha有一些很好的教程,检查出来

但是快速启动将这个例子我测试:

发生在一些“示例”一.htaceess目录

与此内容:

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

然后你的C盘上(我如果需要的话)在Windows上,检查是否有读访问把htpasswd文件与此内容:

john:smith 

然后只需输入约翰(用户名)SMIT H(密码)。

对每个你想保护的目录都做同样的事情,把一个.htaccess文件放到已经存在的.htpasswd文件中。

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