2012-02-19 86 views
3

几年前我为一家小公司写了一个网站,当时我正在读书。我意识到我的安全技能并不如他们应该得到的那样好,最近这个网站被黑客攻击了,并且恶意的php代码被上传了一个用于图片上传的表单。保护文件上传

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

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

+0

用mime_content_type()可以检测到文件模式类型(可靠的类型)http://php.net/manual/en/function.mime-content-type.php – 2012-02-19 23:18:04

+0

参见http:// www.php.net/manual/en/book.fileinfo.php – 2012-02-19 23:18:33

+0

@迈克尔 - 但不是足够可靠的安全性。仍然存在内容嗅探攻击,GIFAR攻击等的风险。 – 2012-02-20 06:35:57

回答

7

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

我会给你一个你应该采取的方法和一些阅读以了解更多的总结。请确保您阅读了额外的阅读材料,因为我的摘要不完整。

总结:

  1. 主机上一个单独的域用户上载的内容。这是你可以采取的最重要和最可靠的防御措施。

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

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

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

阅读:

+0

感谢您的一个很好的答案。希望我能+2它:) – havardhu 2012-02-20 18:13:00