343

我正在使用 OWASP ZAP 在我的本地主机上进行一些渗透测试,并且它不断报告此消息:

Anti-MIME-Sniffing 标头 X-Content-Type-Options 未设置为“nosniff”

此检查特定于 Internet Explorer 8 和 Google Chrome。如果 Content-Type 标头未知,请确保每个页面都设置 Content-Type 标头和 X-CONTENT-TYPE-OPTIONS

我不知道这意味着什么,我在网上找不到任何东西。我试过添加:

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

但我仍然收到警报。

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

4

8 回答 8

200

它可以防止浏览器进行 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

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

编辑:

哦,那是 HTTP 标头,而不是 HTML 元标记选项。

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

于 2013-08-20T14:33:18.830 回答
180

描述

将服务器的X-Content-Type-OptionsHTTP 响应标头设置为nosniff指示浏览器禁用内容或 MIME 嗅探,后者用于覆盖响应Content-Type标头以使用隐式内容类型猜测和处理数据。虽然这在某些情况下很方便,但也可能导致下面列出的一些攻击。将服务器配置为返回X-Content-Type-OptionsHTTP 响应标头集nosniff将指示支持 MIME 嗅探的浏览器使用服务器提供Content-Type的内容,而不是将内容解释为不同的内容类型。

浏览器支持

X-Content-Type-OptionsChrome、Firefox 和 Edge 以及其他浏览器都支持 HTTP 响应标头。Mozilla Developer Network (MDN) Browser Compatibility Table for X-Content-Type-Options 提供了最新的浏览器支持:

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options

反击攻击

  1. MIME 混淆攻击允许用户上传恶意代码,然后由浏览器执行,这些代码将使用替代内容类型(例如隐式application/javascript与显式text/plain。这可能导致“偷渡式下载”攻击,这是网络钓鱼的常见攻击媒介。托管用户生成内容的站点应使用此标头来保护其用户。VeraCodeOWASP提到了这一点,其内容如下:

    这减少了路过式下载攻击和提供用户上传内容的网站的风险,通过巧妙的命名,MSIE 可以将这些内容视为可执行或动态 HTML 文件。

  2. 也可以通过Content-Type嗅探来启用未经授权的盗链。通过出于一个目的(例如查看)热链接到具有资源的站点,应用程序可以依赖于内容类型嗅探,并在可能违反其服务条款的另一目的的站点上生成大量流量,例如GitHub显示用于查看的 JavaScript 代码,但不适用于执行:

    一些讨厌的非人类用户(即计算机)已经通过原始视图功能“盗链”资产——使用原始 URL 作为srca<script><img>标记。问题是这些不是静态资产。原始文件视图与 Rails 应用程序中的任何其他视图一样,必须在返回给用户之前呈现。这很快就会对性能造成很大影响。过去,我们被迫阻止以这种方式提供的流行内容,因为它给我们的服务器带来了过大的压力。

于 2016-05-13T04:43:43.550 回答
113
# 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

于 2015-10-21T19:27:33.910 回答
30

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

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

你完成了。

于 2016-03-28T06:15:18.047 回答
12

X-Content-Type-Options 响应 HTTP 标头是服务器使用的标记,用于指示不应更改和遵循在 Content-Type 标头中通告的 MIME 类型。这允许选择退出 MIME 类型嗅探,或者换句话说,这是一种表示网站管理员知道他们在做什么的方式。

句法 :

X-Content-Type-Options: nosniff

指令:

nosniff 如果请求的类型为 1.“style”且 MIME 类型不是“text/css”,或 2.“script”且 MIME 类型不是 JavaScript MIME 类型,则阻止请求。

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

规格 :

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

于 2017-10-09T11:25:51.007 回答
2

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

来自安全研究员 Scott Helme,这里

它可以防止 Google Chrome 和 Internet Explorer 尝试从服务器声明的内容类型中模拟嗅探响应的内容类型。

于 2021-01-26T12:59:14.127 回答
2

只是为了详细说明元标记的事情。我听过一个演讲,其中有一个声明,应该始终在 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”选项来自 HTTP 标头,而不是附加在 HTTP 响应中的 HTML 文件。

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

启用的无嗅探选项的可视化

于 2021-01-23T15:23:10.030 回答
1

防止在没有发送 mimetype 的情况下进行内容嗅探

Ubuntu 20.04 - apache 2.4.41 上的配置:

启用标头模块 $ sudo a2enmod headers

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

Header always set X-Content-Type-Options: nosniff

启用配置$ sudo a2enconf security.conf

重启阿帕奇 $ 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
于 2020-10-23T06:35:47.777 回答