什么是“ X-Content-Type-Options = nosniff”?


291

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

但是我仍然收到警报。

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

Answers:


178

它阻止浏览器进行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/zh-cn/library/ie/gg622941(v=vs.85).aspx


22
您必须提及的是for servers hosting untrusted content。对于不显示用户上传内容的网站,则无需进行设置。
machineaddict

12
@machineaddict,错了。无论内容是可信的还是不可信的,嗅探都会发生。请参阅security.stackexchange.com/a/11761/2379。它将以微妙的方式破坏您的网站。如果您不喜欢惊喜,请务必禁用嗅探功能。
Pacerier

32
我认为您错过了“什么是MIME类型嗅探”这一部分。
VarunAgw


“强制”标题可能会误解为“要求”,我将其更改为“尊重”。
查理

135

描述

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

浏览器支持

所述X-Content-Type-OptionsHTTP响应报头在浏览器,Firefox和边缘以及其他浏览器支持。Mozilla开发人员网络(MDN)浏览器兼容性表中针对X-Content-Type-Options提供了最新的浏览器支持:

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

反击

  1. MIME混淆攻击允许用户上传恶意代码,然后由浏览器执行,这些浏览器将使用备用内容类型解释文件,例如隐式或application/javascript显式,从而通过用户生成的内容站点进行攻击text/plain。这可能会导致 “偷渡式下载”攻击,这是网络钓鱼的常见攻击媒介。承载用户生成内容的网站应使用此标头来保护其用户。这是通过提到的VeraCode OWASP它说以下内容:

    这样可以减少遭受偷渡式下载攻击和服务于用户上传内容的站点的风险,这些站点通过巧妙的命名可以被MSIE视为可执行文件或动态HTML文件。

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

    一些讨厌的非人类用户(即计算机)已通过原视图功能采取“盗链”资产-使用原始URL作为src一个<script><img>标签。问题在于这些不是静态资产。与Rails应用程序中的任何其他视图一样,原始文件视图必须先呈现,然后再返回给用户。这很快会给性能带来巨大损失。过去,我们一直被迫以这种方式阻止流行的内容,因为它给我们的服务器带来了极大的压力。


谁认为决定忽略显式的内容类型并使用猜测功能是一个好主意?omg ...
Sam Sirry

105
# 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


1
难道不是总是这样吗?我觉得很奇怪,浏览器将尝试“智能”操作并忽略显式的内容类型标头。
Sam Sirry

25

对于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>

您完成了。


3
也可以在IIS中设置自定义标头,但是您的解决方案更好,因为它可以是源代码控制的,而不是配置管理的。
ajeh

9

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.