在现代浏览器中允许 XSS 的 MIME 类型

信息安全 网页浏览器 xss javascript 哑剧型
2021-08-15 05:46:51

假设可以在 上托管任意文件goodguys.com,这些文件使用攻击者控制的 MIME 类型和X-Content-Type-Options=nosniff. 哪些 MIME 类型在用作 iframe 的 src、链接的目标或以其他方式在相当现代的浏览器中时允许 XSS?我至少知道text/htmland image/svg+xml,但是还有其他的吗?

编辑:我想强调基于 MIME 类型的黑名单方法不是一个好主意。这个问题的动机是我可以使用有趣的答案作为支持 MIME 白名单的令人信服的论据。

1个回答

您将无法汇总危险 MIME 类型的完整列表。

虽然阻止text/htmltext/xmlimage/svg+xml等很简单,但有许多不为人知的遗留或特定于供应商的 MIME 类型并不广为人知,并且可能在某些浏览器中工作。例如,MIME 类型application/vnd.wap.xhtml+xml在 Firefox 中被理解为 XML,而在 Chrome 中根本不会触发。概念证明:

data:application/vnd.wap.xhtml+xml,<x:script xmlns:x="http://www.w3.org/1999/xhtml">alert(1)</x:script>

此外,还有一些 MIME 类型不会立即导致 XSS,但会产生副作用。例如,攻击者可能想通过提供具有application/x-xpinstallMIME 类型的内容来欺骗用户安装 Firefox 插件。(这种攻击会有一些额外的障碍,但你明白了。)

最后,第三方供应商也可能注册他们自己的自定义 MIME 类型(想想 Flash 小程序application/x-shockwave-flash,JAVA 小程序,嵌入式媒体播放器等),其中一些具有执行脚本代码的能力。很难在黑名单上跟踪这些内容。

总之 - 如果您正在计划实际实施,您应该将无害的 MIME 类型列入白名单,而不是将危险的类型列入黑名单。