MIME 嗅探
MIME 嗅探 是什么?
MIME 嗅探浏览器根据响应字节猜测内容类型的行为,可被利用,将用户上传的文件作为脚本执行。
MIME 嗅探是浏览器的一项遗留特性:浏览器检查响应的前几个字节,并覆盖服务器声明的 Content-Type 响应头,以便更实用地渲染资源。当应用以错误或笼统的类型提供用户上传的文件时,攻击者便会滥用该特性:含有 HTML 或 JavaScript 的文件可能被嗅探为 text/html 并在受害者的源中执行,从而形成存储型 XSS。
这一行为可追溯到早期的 Internet Explorer,其激进的嗅探是"内容类型混淆"型 XSS 的一大祸源;微软在 IE8(2008 年)中引入了 X-Content-Type-Options: nosniff 这一退出选项,如今它已由 WHATWG Fetch 规范中的 MIME Sniffing Standard 标准化。发送 nosniff 会强制浏览器遵循声明的类型,并拒绝执行 Content-Type 与请求目标不匹配的脚本或样式表。现代加固手段会分层部署多重控制:以正确、具体的 Content-Type 提供每个用户上传的文件,并在适当情况下附加 Content-Disposition: attachment;将用户内容托管在独立的沙箱源上;以及强制实施严格的 Content-Security-Policy。安全扫描器和响应头评分工具(例如 Mozilla Observatory)会标记任何缺少 nosniff 的 HTML 响应。
flowchart TD
A[用户上传文件] --> B[应用以错误/笼统类型<br/>将其返回]
B --> C{是否设置了 X-Content-Type-Options:<br/>nosniff?}
C -- 否 --> D[浏览器嗅探字节,<br/>渲染为 text/html]
D --> E[存储型 XSS 在<br/>受害者源中执行]
C -- 是 --> F[浏览器遵循<br/>声明的类型]
F --> G[文件被下载,而非执行]● 示例
- 01
X-Content-Type-Options: nosniff
- 02
头像上传端点返回 image/png,但文件实际是 HTML;若未启用 nosniff,浏览器会将其作为页面执行。
● 常见问题
MIME 嗅探 是什么?
浏览器根据响应字节猜测内容类型的行为,可被利用,将用户上传的文件作为脚本执行。 它属于网络安全的 应用安全 分类。
MIME 嗅探 是什么意思?
浏览器根据响应字节猜测内容类型的行为,可被利用,将用户上传的文件作为脚本执行。
如何防御 MIME 嗅探?
针对 MIME 嗅探 的防御通常结合技术控制与运营实践,详见上方完整定义。