MIME 嗅探保护

信息安全 Web应用程序 攻击预防 网页浏览器
2021-08-23 12:08:41

众所周知,旧版本的 MSIE(8 之前)有一个讨厌的习惯,即如果图像“看起来像”HTML,则将其视为 HTML,这可能会导致允许人们上传图像的网站出现严重漏洞。虽然在 IE8 中已经修复了,但是还是有很多 IE7 及之前的版本,所以需要解决这个问题。所以问题是,如何最好地解决它,给定:

  1. 具有文件上传功能的 PHP 站点
  2. 不重新编码图像(即不能使用 ImageMagick 之类的东西)
  3. 应允许直接访问图像
  4. 我们不能禁止人们使用“错误”的扩展

检查前 256 个字节是否有类似 <(html|body|img|script|head)> 的内容就足够了吗?有什么更好的方法吗?

2个回答

http://www.adambarth.com/papers/2009/barth-caballero-song.pdf是该问题的出色概述参考。它不仅适用于图像,还适用于 txt 文件和其他文件......

不,检查前 256 个(或任何给定的数字)字节绝对是不够的。

即使您能够验证(顺便说一句,您需要检查大约 4K 字节......)那里没有 HTML(忽略通过编码等容易混淆 HTML),HTML 并不是唯一的恶意可能隐藏在您的图像中的可能性(我假设是正在上传的图像?)

例如,请参阅有关损坏的图像漏洞的这个问题- 不仅是缓冲区溢出,而且正如我的回答所说的GIFAR(和类似格式)的可能性,它本质上既是一个完全有效的 GIF,也是一个有效且可执行的 JAR 文件。这是因为并非所有文件格式都在文件开头有其标题。
因此,检查开头显然不是要走的路。