我用OWASP ZAP在我的本地主机上做了一些渗透测试,它一直报告这条消息:

反mime嗅探报头X-Content-Type-Options未设置为 “nosniff” 此检查仅针对ie8和谷歌Chrome浏览器。 确保每个页面都设置了内容类型标头和 X-CONTENT-TYPE-OPTIONS,如果Content-Type头未知

我不知道这是什么意思,我在网上也找不到任何信息。我试着补充:

<meta content="text/html; charset=UTF-8; X-Content-Type-Options=nosniff" http-equiv="Content-Type" />

但我还是收到了警报。

参数的正确设置方法是什么?


当前回答

X-Content-Type-Options HTTP响应报头是一个标记,服务器使用它来指示在Content-Type报头中发布的MIME类型不应该被更改,并且应该被遵循。这允许您选择退出MIME类型嗅探,或者换句话说,这是一种说网站管理员知道他们在做什么的方式。

语法:

X-Content-Type-Options: nosniff

指令:

nosniff 如果请求类型为,则阻塞请求

而MIME类型不是“text/css”,或者 而MIME类型不是JavaScript的MIME类型。

注意:nosniff只适用于“脚本”和“样式”类型。此外,将nosniff应用于图像也被证明与现有的网站不兼容。

规格:

https://fetch.spec.whatwg.org/#x-content-type-options-header

其他回答

再详细说明一下元标签。我听过一个演讲,其中有一个声明,人们应该总是在html中插入“no-sniff”元标签,以防止浏览器嗅探(就像OP所做的那样):

<meta content="text/html; charset=UTF-8; X-Content-Type-Options=nosniff" http-equiv="Content-Type" />

然而,对于w3c兼容的网站来说,这不是一个有效的方法,验证器将引发一个错误:

Bad value text/html; charset=UTF-8; X-Content-Type-Options=nosniff for attribute content on element meta: The legacy encoding contained ;, which is not a valid character in an encoding name.

这个问题是无法解决的。要正确地关闭no-sniff,你必须去服务器设置并在那里关闭它。因为“no-sniff”选项来自HTTP报头,而不是HTTP响应中附加的HTML文件。

要检查no-sniff选项是否被禁用,可以启用开发人员控制台,网络选项卡,然后检查HTTP响应报头:

防止在没有发送mimetype的地方嗅探内容

Ubuntu 20.04 - apache 2.4.41的配置:

启用headers模块 $ sudo a2enmod头文件

编辑/etc/apache2/conf-available/security.conf文件,添加:

报头总是设置X-Content-Type-Options: nosniff

启动配置$ sudo a2enconf security.conf

重新启动Apache $ sudo systemctl restart apache2

$ curl -I localhost

HTTP/1.1 200 OK
Date: Fri, 23 Oct 2020 06:12:16 GMT
Server:  
X-Content-Type-Options: nosniff
Last-Modified: Thu, 22 Oct 2020 08:06:06 GMT

它阻止浏览器进行mime类型的嗅探。大多数浏览器现在都尊重这个头,包括Chrome/Chromium, Edge, IE >= 8.0, Firefox >= 50和Opera >= 13。看到的:

https://blogs.msdn.com/b/ie/archive/2008/09/02/ie8-security-part-vi-beta-2-update.aspx?Redirected=true

发送带有值的新的X-Content-Type-Options响应头 nosniff将防止Internet Explorer嗅探mime响应 远离声明的内容类型。

编辑:

哦,还有,那是一个HTTP头,不是HTML元标记选项。

参见:http://msdn.microsoft.com/en-us/library/ie/gg622941(v=vs.85).aspx

X-Content-Type-Options HTTP响应报头是一个标记,服务器使用它来指示在Content-Type报头中发布的MIME类型不应该被更改,并且应该被遵循。这允许您选择退出MIME类型嗅探,或者换句话说,这是一种说网站管理员知道他们在做什么的方式。

语法:

X-Content-Type-Options: nosniff

指令:

nosniff 如果请求类型为,则阻塞请求

而MIME类型不是“text/css”,或者 而MIME类型不是JavaScript的MIME类型。

注意:nosniff只适用于“脚本”和“样式”类型。此外,将nosniff应用于图像也被证明与现有的网站不兼容。

规格:

https://fetch.spec.whatwg.org/#x-content-type-options-header

一个非常简单的解释,我发现有用:nosniff响应头是一种保持网站更安全的方法。

来自安全研究员Scott Helme的评论如下:

它可以防止谷歌Chrome和Internet Explorer试图模仿嗅探响应的内容类型,使其远离服务器声明的内容类型。