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

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

anti - mime - sniff报头X-Content-Type-Options未设置为 “nosniff”< / p >

此检查针对ie8和谷歌Chrome浏览器。 确保每个页面都设置了内容类型标头和 如果Content-Type头未知,则X-CONTENT-TYPE-OPTIONS

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

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

但我还是收到了警报。

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

499187 次浏览

它阻止浏览器进行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 < a href = " http://stopmalvertising.com/security/securing-your-website-with-.htaccess/.htaccess-http-headers.html " > < / >

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

这样就做完了。

描述

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

浏览器支持

在Chrome, Firefox和Edge以及其他浏览器中支持X-Content-Type-Options HTTP响应头。最新的浏览器支持可在Mozilla开发者网络(MDN)浏览器兼容性表X-Content-Type-Options:

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

攻击反击

  1. MIME混淆攻击允许用户上传恶意代码,然后由浏览器执行,浏览器将使用替代内容类型来解释文件,例如隐式application/javascript vs.显式text/plain,从而通过用户生成内容网站进行攻击。这可能会导致“驾车download"攻击,这是网络钓鱼的常见攻击向量。承载用户生成内容的站点应该使用此标头来保护用户。VeraCodeOWASP提到了这一点,它们说:

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

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

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

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仅适用于“;script"和“;style"类型。此外,将nosniff应用于图像也被证明与现有的网站不兼容。

规格:

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

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

Ubuntu 20.04 - apache 2.4.41的配置:

启用headers模块 $ sudo a2enmod headers < / p >

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

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

启用配置$ sudo a2enconf security.conf

< p >重新启动Apache $ sudo systemctl restart apache2 < / p >

$ 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

再详细说明一下元标签。我听过一个演讲,在做陈述的地方,人们应该总是插入“no-sniff"meta标签在html中,以防止浏览器嗅探(就像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”;option是来自HTTP头的内容,而不是来自附加在HTTP响应上的HTML文件。

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

Visualization of enabled no-sniff option

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

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

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