我有一个网站,用户可以在其中存放文件。我不希望任何人都可以访问这些文件。
我看到有些人my_secret_folder
在目录的同一级别创建一个文件夹(比如 )www
。然后,他们使用以下方式上传文件(使用 PHP 脚本):
$destination = $_SERVER['DOCUMENT_ROOT']."/../my_secret_folder/".$filename
$destination
上传文件的完整路径在哪里。
然后,只有 PHP 脚本(来自 www 文件夹中)允许访问文件。
这是一个好习惯吗?
是的,这是一个很好的做法。将它放在 webroot 之外意味着文件不会因 web 服务器中的简单配置错误而公开,从而增加了另一个公开障碍——而且它的实施成本基本上为零。
假设这是一个 apache 服务器,您是否考虑过对目录进行限制?
如果有人试图浏览目录并将 HTML GET 限制为以管理员身份登录的人,则不要显示文件列表。
@Voo 的评论中已经暗示了这一点,但这一点非常重要,我认为应该将其移至答案框。
这是一个很好的做法,当且仅当web 用户无法控制时
$filename
。否则就是路径遍历漏洞。考虑一下如果客户提出特殊要求会发生什么
$filename
情况../www/index.php
。您刚刚允许您的上传者覆盖您的网络应用程序的代码。抵制通过将诸如
/
和之类的值列入黑名单来解决此问题的诱惑..
:有很多方法可以解决这个问题,上面的链接列出了一些。这个问题的规范解决方案是 (a) 自己选择文件名或 (b) 有一个明确的允许字符白名单。