我用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" />

但我还是收到了警报。

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


当前回答

再详细说明一下元标签。我听过一个演讲,其中有一个声明,人们应该总是在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响应报头:

其他回答

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

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

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

再详细说明一下元标签。我听过一个演讲,其中有一个声明,人们应该总是在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响应报头:

它阻止浏览器进行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

# prevent mime based attacks
Header set X-Content-Type-Options "nosniff"

这个头可以防止基于“mime”的攻击。这个报头可以防止Internet Explorer对声明的内容类型以外的响应进行mime -嗅探,因为报头指示浏览器不要覆盖响应内容类型。使用nosniff选项,如果服务器说内容是text/html,浏览器就会将其呈现为text/html。

http://stopmalvertising.com/security/securing-your-website-with-.htaccess/.htaccess-http-headers.html

对于Microsoft IIS服务器,您可以通过web启用此标头。配置文件:

<system.webServer>
    <httpProtocol>
      <customHeaders>
        <remove name="X-Content-Type-Options"/>
        <add name="X-Content-Type-Options" value="nosniff"/>
      </customHeaders>
    </httpProtocol>
</system.webServer>

这样就做完了。