将uploads文件夹保留在'public_html'之外是否足以保护我的应用程序免受恶意上传的侵害?

时间:2010-06-03 11:08:40

标签: php upload

虽然我意识到保护上传过程有不同的方法,但在基本原则方面我仍然感到困惑。我想允许用户上传他们想要的任何类型的文件,但保证我的应用程序安全。所以我的问题是:

将原始名称的文件存储在“webroot”之外的“uploads”文件夹中并通过一些download.php脚本获取它是否已足够?

如果不够安全,请指出正确的方向,或建议我应采取哪些额外步骤以确保安全。 谢谢。

2 个答案:

答案 0 :(得分:1)

不,这还不够。

当您保存上传的文件时,您必须确保没有任何恶意发生(例如,如果文件的“原始名称”类似于“../somewhere”,则可能会覆盖另一个文件,包括一些PHP脚本public_html,这将允许一个破解者获得更高级别的访问权限)。在使用它之前,生成随机名称或至少清理原始文件名可能是最明智的。

以类似的方式,download.php必须不会被'欺骗'检索到下载目录之外的文件。

答案 1 :(得分:0)

这取决于“恶意上传”的含义。

正如Artelius建议的那样,即使您有一个专用目录 - 并确保使用基本名称($ uploaded_name)命名文件,仍有可能拒绝攻击或数据中毒服务。为文件生成唯一名称并在其他地方存储原始名称会更安全一些。

假设您的代码中没有其他漏洞,这种方法可以防止您的站点代码被泄露 - 但它确实为试图匿名攻击第三方站点的人提供了一个很好的资源 - 如果他们可以触发远程包含来自你的网站。

此外,您还没有说过如何保护自己或您的合法用户免受上传病毒感染文件,被盗内容和某些地方可能被视为违禁品的内容(例如色情内容)的侵害。

下进行。