我对文件夹和文件权限的工作方式有一些疑问。说我有用户目录以外的“保护”,如下..php文件夹和文件权限
users
-- usera
-- docs
-- userb
-- docs
protected
我不想谁没有权限,访问用户A的目录任何用户B。另外,我不希望任何人通过url链接访问目录目录。基本上我只想让用户能够访问他们自己的目录,而不是其他人。如何做呢?
谢谢!
我对文件夹和文件权限的工作方式有一些疑问。说我有用户目录以外的“保护”,如下..php文件夹和文件权限
users
-- usera
-- docs
-- userb
-- docs
protected
我不想谁没有权限,访问用户A的目录任何用户B。另外,我不希望任何人通过url链接访问目录目录。基本上我只想让用户能够访问他们自己的目录,而不是其他人。如何做呢?
谢谢!
我在这里回答了一个类似的问题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要使用/download.php?file=filename.ext拒绝所有直接下载文件
deny from all
这样,你会链接到文件夹和它只会从当前用户的用户目录下载该文件。
您会希望确保您清理输入文件名,以便您不易受目录横向漏洞利用攻击。
没有更多信息可以继续,我的建议是确保用户目录位于Web根目录之上。这将阻止他们被链接到。然后创建一个验证用户是谁的PHP脚本。一旦您知道登录用户的身份,您可以使用fpassthru()(http://php.net/fpassthru)或类似功能将文档交付给用户。
这需要更多的上下文。访问如何? “受保护”的相关性是什么?在读取或下载文件时访问 – deceze
。保护是一个目录,具有.htaccess'拒绝所有'托管php脚本。 – twb
由于您谈论的是“权限”,这通常是文件系统的事情,所以这仍然有点令人困惑。当你通过网络服务器访问文件时,你似乎在谈论更多的抽象权限,或者你是? – deceze