php文件夹和文件权限

时间:2011-11-25 02:42:41

标签: php file permissions directory

我对文件夹和文件权限的工作方式有一些疑问。说我的用户目录在'protected'之外,如下所示..

users
  -- usera
    -- docs
  -- userb
    -- docs
protected

我不希望没有权限的用户B访问用户A目录中的任何内容。另外,我不希望任何人通过url链接访问目录目录。基本上我只希望用户能够访问自己的目录,而不是其他人。怎么办呢?

谢谢!

2 个答案:

答案 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>