我对文件夹和文件权限的工作方式有一些疑问。说我的用户目录在'protected'之外,如下所示..
users
-- usera
-- docs
-- userb
-- docs
protected
我不希望没有权限的用户B访问用户A目录中的任何内容。另外,我不希望任何人通过url链接访问目录目录。基本上我只希望用户能够访问自己的目录,而不是其他人。怎么办呢?
谢谢!
答案 0 :(得分:1)
如果没有更多信息,我的建议是确保用户目录位于Web根目录之上。这将阻止它们被链接。然后创建一个PHP脚本,验证用户是否是他们所说的人。一旦您知道登录用户的身份,就可以使用fpassthru()(http://php.net/fpassthru)或类似内容将文档传递给用户。
答案 1 :(得分:1)
我在这里回答了一个类似的问题limiting users to subdirectories,您应该可以根据自己的需要进行调整,我也在这里复制过。
的download.php
<?php
/** Load your user assumed $user **/
$file = trim($_GET['file']);
/** Sanitize file name here **/
if (true === file_exists('/users/user'.$user->id.'/'.$file)) {
//from http://php.net/manual/en/function.readfile.php
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$file.'"');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
} else {
throw new Exception('File Not Found');
}
.htaccess拒绝所有直接文件下载
deny from all
然后使用/download.php?file=filename.ext链接到文件夹,它只会从当前用户的users目录下载该文件。
您需要确保清理输入文件名,这样您就不会受到目录横向漏洞利用的攻击。</ p>