我一直在使用OWASP ZAP进行一些渗透测试,它对所有请求都发出以下警报:X-Content-Type-Options Header Missing
。
我了解标题,以及为什么推荐它。 this StackOverflow question对此进行了很好的解释。
但是,我发现了各种引用,这些引用表明它仅用于.js和.css文件,并且设置其他MIME类型的标头实际上可能是 bad 的事情:
以上参考文献(及其他参考文献)表明,仅对所有响应设置此标头是不好的,但是尽管遵循了任何具有相关外观的链接并在Google上进行了搜索,但我找不到该论点背后的任何原因。
与设置X-Content-Type-Options: nosniff
相关的风险/问题是什么?为什么对于text/css
和text/javascript
以外的MIME类型应该避免使用它?
或者,如果没有风险/问题,为什么Mozilla(及其他)暗示存在风险/问题?
答案 0 :(得分:2)
Sean Thorburn的回答非常有帮助,并向我指出了一些好的材料,这就是为什么我授予赏金的原因。但是,我现在已经做了更多的挖掘工作,我想我已经找到了需要的答案,这与肖恩给出的答案相反。
因此,我将回答我自己的问题:
以上参考文献(及其他参考文献)表明,仅对所有响应设置此标头是不好的,但是尽管遵循了任何具有相关外观的链接并在Google上进行了搜索,但我找不到该论点背后的任何原因。
这里有一个误解-这不是他们的意思。
在研究过程中发现的资源仅涉及标头,而我只将其理解为“脚本和样式类型”,我将其解释为表示被用作text/javascript
或text/css
的文件。
但是,他们实际指的是文件加载的上下文,而不是文件的MIME类型。例如,<script>
或<link rel="stylesheet">
标签。
基于这种解释,一切都变得更加有意义,答案也变得清晰起来:
您需要为所有文件提供一个nosniff
标头,以减少来自用户内容的注入攻击的风险。
仅使用此标头提供CSS / JS文件是没有意义的,因为在这种情况下,这些文件类型是可以接受的,不需要任何其他嗅探。
但是,对于其他类型的文件,通过禁止嗅探,我们确保在每个上下文中仅允许MIME类型与预期类型匹配的文件。这样可以减轻恶意脚本被隐藏在图像文件中的风险(例如),这种方法可以绕过上传检查,并允许从您的域托管第三方脚本并将其嵌入到您的网站中。
与设置X-Content-Type-Options:nosniff相关的风险/问题是什么?为什么对于text / css和text / javascript以外的MIME类型应该避免使用它?
或者,如果没有风险/问题,为什么Mozilla(及其他)暗示存在风险/问题?
没有问题。
所描述的问题是有关破坏与现有站点兼容性的风险的问题。 Mozilla的研究表明,由于服务器配置错误,在nosniff
标签上强制使用<img>
选项会破坏很多站点,因此在图像上下文中将忽略标题。
其他上下文(例如HTML页面,下载,字体等)不使用嗅探,没有相关风险或存在防止阻止嗅探被禁用的兼容性问题。
因此,他们根本不建议您完全避免使用此标头。
但是,他们所讨论的问题确实导致了此讨论的重要脚注:
如果您使用的是nosniff
标头,请确保您还提供了正确的Content-Type
标头!
一些参考资料,帮助我更全面地理解了这一点:
答案 1 :(得分:1)
我参加聚会有点晚了,但这是我的2c。
在提供用户生成的内容时,此标头很有意义。因此,人们不会上传实际上包含一些JS代码的.png
文件,而是在.png
标签中使用该<script>
。
您不必为您拥有100%控制权的静态文件设置它。
答案 2 :(得分:0)
我会坚持使用js,css,text / html,json和xml。
Google建议将受保护资源提供的不可猜测的CSRF令牌用于其他内容类型。即使用受nosniff标头保护的js资源生成令牌。
您可以将其添加到所有内容中,但这很繁琐,而且如上所述,您可能会遇到兼容性和用户问题。
https://www.chromium.org/Home/chromium-security/corb-for-developers