【问题标题】:Best Practise: How to protect user specific files in a web-folder?最佳实践:如何保护网络文件夹中的用户特定文件?
【发布时间】:2015-02-08 08:22:12
【问题描述】:

我有一个包含不同用户组的网站。每个用户组都有他们可以访问的不同页面。这些页面可以包含指向文件(文档、pdf 等)的链接。每个组现在应该只能访问组特定文件夹中的文档。

完成这项工作的最佳做​​法是什么?出现以下情况:

  • 对所有上传的文件生成一个Hash,并根据该hash命名文件,这样就不能被 尝试并限制目录的显示。 (问题:链接可以共享,文件可以被公众访问)
  • 使用 .htaccess 文件限制访问(问题:用户每次都必须输入密码,并且 cms 可以链接到 .htaccess 文件 - 不是动态的)
  • 使用 .htaccess 检查 cookie 是否存在,例如http://www.willmaster.com/blog/contentprotection/htaccess-cookie.php(问题:如果我创建新用户组,则不是动态的)

这个问题的最佳解决方案是什么?是上面提到的吗?

【问题讨论】:

  • 将它们移出网络文件夹
  • 我应该如何访问它们并通过 cms 上传?此外,这些组也不会是动态的。
  • 如果您将文件移到 web 文件夹之外,那么您的 web 文件夹中有一个 fileAccess 脚本,用于验证用户是否有权访问他们在发送之前请求的文件通过readfile() 访问他们的浏览器
  • 谢谢!是否可以使用 CMS 将文件上传到不可访问的位置?是否可以根据在 CMS 中创建的组来编辑此 fileAccess 文件?我不这么认为?!
  • 是的,这是完全可能的,上传的文件可以放置在网络服务器用户可以访问的服务器文件系统中的任何位置,而不仅仅是在网络根目录下

标签: php apache .htaccess cookies


【解决方案1】:

我所做的是将文件包装在具有访问控制的动态脚本中:

if ($userIsLoggedIn)
{
  header('Content-Type: application/pdf');
  header('Content-Transfer-Encoding: binary');
  header('Content-disposition: inline; filename="'.$filenameOfPDF.'"');
  header('Pragma: public');
  readfile($pathToPDF);
}
else echo 'You do not have access';

这是用 PHP 编写的。文件本身存储在无法从网络访问的目录中。

唯一的缺点是您需要为每种文件类型执行此操作。如果只有访问很重要,您可以概括:

if ($userIsLoggedIn)
{
  header('Content-Type: application/octet-stream');
  header('Content-Transfer-Encoding: binary');
  header('Content-disposition: inline; filename="'.$filename.'"');
  header('Pragma: public');
  readfile($path);
}
else echo 'You do not have access';

但我相信还有其他解决方案。

【讨论】:

  • 感谢您的意见!是否可以使用 CMS 将文件上传到不可访问的位置?
  • 如果您的 CMS 是基于 Web 的,那么您可以创建一个可供 CMS 访问的目录,但不能访问其他任何内容。请参阅特定 CMS 的手册。这会因 CMS 而异,因此无法给出一般性答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-26
  • 2015-07-22
  • 2022-08-11
  • 2011-05-17
  • 2012-05-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多