保护文件上传

时间:2012-02-19 23:16:19

标签: php security file-upload

几年前,当我在学习的时候,我为一家小公司写了一个网站。我已经意识到我的安全技能并不像他们应该的那样好,并且最近该网站遭到黑客攻击并且使用用于图像上传的表单上传了恶意的PHP代码。

我已经转移到.NET世界,虽然我知道如何在.NET中保护文件上传,但我真的不知道如何使用PHP来实现。很抱歉,我无法提供任何源代码,因此我不希望任何人发布我的代码的任何直接修复。

我希望有人可以向我展示服务器端分析的好方法,以确保上传的$ FILES数组内容实际上是图像或音频文件,或者至少它不是PHP文件。

1 个答案:

答案 0 :(得分:7)

很高兴你问道。这是一个棘手的主题,很少有应用程序开发人员意识到安全风险。

我将向您概述您应采取的方法,并阅读一些内容以了解更多信息。请务必阅读其他阅读材料,因为我的摘要不完整。

要点:

  1. 在单独的域上托管用户上传的内容。这是你可以采取的最重要和最可靠的防御。

  2. 检查上传文件的MIME类型(上传时间),以确保其位于安全MIME类型的白名单中。生成一个新的随机文件名以将其保存在。对于某些文件类型(例如图像),请考虑重新编码(例如,转换为PNG,或使用ImageMagick将其从文件类型转换为相同的文件类型),因为这可能会使某些攻击失败。

  3. 下载/检索文件时,请确保将Content-Type:标头明确设置为安全MIME类型。同时设置X-Content-Type-Options: nosniff标头。如果您不打算在浏览器中查看该文件,也可以发送Content-Disposition: attachment标题,以使浏览器将其视为文件下载。

  4. 扫描文件上传中的病毒或恶意软件。

  5. 读: