【问题标题】:Securing file upload保护文件上传
【发布时间】:2012-02-20 14:41:28
【问题描述】:

几年前,我在学习时为一家小公司写了一个网站。我意识到我的安全技能并没有达到应有的水平,最近该网站被黑客入侵,恶意 php 代码使用用于图像上传的表单上传。

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

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

【问题讨论】:

标签: php security file-upload


【解决方案1】:

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

我会给你一个你应该采取的方法的摘要,以及一些阅读以了解更多信息。确保您阅读了附加阅读,因为我的摘要不完整。

总结:

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

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

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

  4. 扫描上传的文件是否存在病毒或恶意软件。

阅读:

【讨论】:

  • 感谢您的精彩回答。希望我可以 +2 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-11
  • 2012-06-14
  • 2013-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多