我一直在使用OWASP ZAP运行一些渗透测试,并且对所有请求都发出以下警报:X-Content-Type-Options Header Missing

我了解标题,以及为什么推荐它。 this StackOverflow question中对此进行了很好的解释。

但是,我发现各种引用表明它仅用于.js和.css文件,并且为其他MIME类型设置标头实际上可能是一件坏事:


注意:nosniff仅适用于“脚本”和“样式”类型。还对图像应用nosniff证明与现有网站不兼容。 [1]
Firefox在支持nosniff图像时遇到了问题(Chrome在那里不支持它)。 [2]
注意:现代浏览器仅考虑脚本和样式表的标头,并且当使用错误的媒体类型提供服务时发送其他资源(如图像)的标头可能会在较旧的浏览器中造成问题。 [3]


上面的参考资料(和其他参考资料)表明,简单地为所有响应设置此标头是不好的,但是尽管遵循了任何具有相关外观的链接并在Google上进行了搜索,但我找不到该参数背后的任何原因。

与设置X-Content-Type-Options: nosniff关联的风险/问题是什么?为什么对于text/csstext/javascript以外的MIME类型应避免使用它?

或者,如果没有风险/问题,为什么Mozilla(及其他)建议存在风险/问题?

最佳答案

Sean Thorburn的回答非常有帮助,并向我指出了一些好的材料,这就是为什么我授予赏金的原因。但是,我现在已经做了更多的挖掘工作,我想我已经找到了需要的答案,这与肖恩给出的答案相反。

因此,我将回答我自己的问题:


上面的参考资料(和其他参考资料)表明,简单地为所有响应设置此标头是不好的,但是尽管遵循了任何具有相关外观的链接并在Google上进行了搜索,但我找不到该参数背后的任何原因。


这里有一个误解-这不是他们的意思。

我在研究过程中发现的资源仅针对标头提供“脚本和样式类型”,我将其解释为表示被用作text/javascripttext/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标头!



一些参考资料帮助我更全面地理解了这一点:


The WhatWG Fetch standard that defines this header.
A discussion站点检查工具的此标头相关的code commitwebhint.io

关于browser - 什么时候应该使用HTTP header “X-Content-Type-Options:nosniff”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52536531/

10-12 06:58