几年前我在读书的时候为一家小公司写了一个网站。我已经意识到我的安全技能并没有达到应有的水平,最近该网站被黑了,恶意的 php 代码被使用一种用于图像上传的表单上传。
我已经转向 .NET 世界,虽然我知道如何在 .NET 中保护文件上传,但我真的不知道如何使用 PHP 来做到这一点。很抱歉,我无法提供任何源代码,因此我不希望任何人为我的代码发布任何直接修复。
我希望有人能告诉我一个很好的服务器端分析方法,以确保上传的 $FILES 数组内容实际上是图像或音频文件,或者至少不是php-文件。
最佳答案
很高兴你问。这是一个棘手的话题,很少有应用程序开发人员意识到安全风险。
我会给你一个你应该采取的方法的总结,并通过一些阅读来了解更多。请务必阅读附加阅读 Material ,因为我的总结不完整。
总结:
在单独的域上托管用户上传的内容。这是您可以采取的最重要、最可靠的防御措施。
上传时检查上传文件的 MIME 类型,以确保它在安全 MIME 类型的白名单中。生成一个新的随机文件名来保存它。对于某些文件类型,例如图像,请考虑对其重新编码(例如,转换为 PNG,或使用 ImageMagick 将其从其文件类型转换为相同的文件类型),因为这可能会阻止一些攻击。
下载/检索文件时,确保将
Content-Type:
header 明确设置为安全的 MIME 类型。同时设置一个X-Content-Type-Options: nosniff
header 。如果您不打算在浏览器中查看该文件,请同时发送一个Content-Disposition: attachment
header ,以使浏览器将其视为文件下载。扫描文件上传是否有病毒或恶意软件。
阅读:
关于php - 保护文件上传,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9354300/