我用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" />
但我还是收到了警报。
参数的正确设置方法是什么?
它阻止浏览器进行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
防止在没有发送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
再详细说明一下元标签。我听过一个演讲,其中有一个声明,人们应该总是在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响应报头: