我有一个脚本,基本上要求用户在进入目录时登录。用户正确验证后,会将其重定向到其子目录。一切正常,但如果他们更改了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,则会出错。
答案 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文件。
这是非常基础的,阅读一些教程以获得更深入的内容。