什么是http-header“X-XSS-Protection”?

时间:2012-02-01 04:00:00

标签: http http-headers xss

所以我现在一直在使用HTTP来玩telnet(即只需输入telnet google.com 80并输入随机GET和带有不同标题的POST等)但是我遇到了一些谷歌.com传输我不知道的标题。

我一直在查看http://www.w3.org/Protocols/rfc2616/rfc2616.html,并且没有找到谷歌似乎正在喷出的特定http-header的定义:

GET / HTTP/1.1

HTTP/1.1 200 OK
Date: Wed, 01 Feb 2012 03:42:24 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=ISO-8859-1
Set-Cookie: PREF=ID=6ddbc0a0342e7e63:FF=0:TM=1328067744:LM=1328067744:S=4d4farvCGl5Ww0C3; expires=Fri, 31-Jan-2014 03:42:24 GMT; path=/; domain=.google.com
Set-Cookie: NID=56=PgRwCKa8EltKnHS5clbFuhwyWsd3cPXiV1-iXzgyKsiy5RKXEKbg89gWWpjzYZjLPWTKrCWhOUhdInOlYU56LOb2W7XpC7uBnKAjMbxQSBw1UIprzw2BFK5dnaY7PRji; expires=Thu, 02-Aug-2012 03:42:24 GMT; path=/; domain=.google.com; HttpOnly
P3P: CP="This is not a P3P policy! See http://www.google.com/support/accounts/bin/answer.py?hl=en&answer=151657 for more info."
Server: gws
X-XSS-Protection: 1; mode=block
X-Frame-Options: SAMEORIGIN
Transfer-Encoding: chunked

1000

任何人都知道X-XSS-Protection是什么?

6 个答案:

答案 0 :(得分:101)

X-XSS-Protection是Internet Explorer 8(及更新版本)可理解的HTTP标头。 此标头允许域打开和关闭IE8的“XSS过滤器”,这可以防止某些类别的XSS攻击。 IE8默认情况下已激活过滤器,但如果设置为

,服务器可以关闭
   X-XSS-Protection: 0

另见http://blogs.msdn.com/b/ieinternals/archive/2011/01/31/controlling-the-internet-explorer-xss-filter-with-the-x-xss-protection-http-header.aspx

答案 1 :(得分:56)

  • X-XSS-Protection: 1:强制XSS保护(如果用户禁用了XSS保护,则非常有用)

  • X-XSS-Protection: 0:禁用XSS保护

  • 如果检测到潜在的XSS反射(=非持久性)攻击,则令牌mode=block将阻止浏览器(IE8 +和Webkit浏览器)呈现页面(而不是清理)。

    < / LI>

/!\警告,mode=block在IE8中创建了一个漏洞(more info)。

更多信息:http://blogs.msdn.com/b/ie/archive/2008/07/02/ie8-security-part-iv-the-xss-filter.aspxhttp://blog.veracode.com/2014/03/guidelines-for-setting-security-headers/

答案 2 :(得分:39)

此响应标头可用于配置内置反射XSS保护的用户代理。目前,只有Microsoft的Internet Explorer,Google Chrome和Safari(WebKit)支持此标题。

Internet Explorer 8包含一项新功能,可帮助防止反映的跨站点脚本攻击,称为 XSS过滤器。此筛选器默认在Internet,受信任和受限制的安全区域中运行。本地Intranet区域页面可以使用相同的标头选择加入保护。

关于您在问题中发布的标题,

标头X-XSS-Protection: 1; mode=block启用XSS过滤器。当检测到XSS攻击时,浏览器将阻止呈现页面,而不是清理页面。

  

2010年3月,我们在IE8中添加了对新令牌的支持   X-XSS-Protection标头,mode = block。

X-XSS-Protection: 1; mode=block
  

如果存在此令牌,则表示潜在的XSS Reflection攻击   检测到,Internet Explorer将阻止呈现页面。   而不是试图消毒页面来手术删除   XSS攻击,IE将只渲染“#”。

     

Internet Explorer识别可能的跨站点脚本攻击。   它记录事件并向用户显示适当的消息。该   MSDN文章描述了此标头的工作原理。

此过滤器在IE中的工作原理

有关此文章的更多信息,请https://blogs.msdn.microsoft.com/ie/2008/07/02/ie8-security-part-iv-the-xss-filter/

  

XSS Filter作为IE8组件运行,可以全部查看   流经浏览器的请求/响应。当过滤器   在跨站点请求中发现可能的XSS,它识别和   如果它在服务器的响应中被重放,那么攻击就是neuters。用户   没有提出他们无法回答的问题 - IE简单   阻止恶意脚本执行。

     

使用新的XSS Filter,IE8 Beta 2用户遇到Type-1 XSS   攻击会看到如下通知:

     

IE8 XSS攻击通知

     

页面已被修改,XSS攻击被阻止。

     

在这种情况下,XSS Filter已识别出跨站点脚本   攻击URL。它确定了这次攻击   脚本被重播回到响应页面。就这样,   filter无需修改对服务器的初始请求即可生效   或阻止整个回复。

     

Windows Internet上会记录跨站点脚本过滤器事件   Explorer 8可检测并缓解跨站点脚本(XSS)攻击。   通常,一个网站会发生跨站点脚本攻击   恶意,注入(添加)JavaScript代码到其他方面合法   请求到另一个网站。原始请求通常是   无辜的,例如指向另一个页面或公共网关接口的链接   (CGI)脚本提供公共服务(例如留言簿)。该   注入脚本通常会尝试访问特权信息或   第二个网站不打算允许的服务。该   响应或请求通常会将结果反映回来   恶意网站。 XSS过滤器,Internet Explorer的新功能   8,检测URL和HTTP POST请求中的JavaScript。如果JavaScript是   检测到,XSS过滤器搜索反射信息,信息   如果攻击,将返回攻击网站   请求未提交。如果检测到反射,则为XSS   过滤器会对原始请求进行清理,以便进行额外的操作   JavaScript无法执行。然后,XSS筛选器将该操作记录为   跨站点脚本过滤器事件。下图显示了一个示例   修改的网站,以防止跨站点脚本攻击。

来源:https://msdn.microsoft.com/en-us/library/dd565647(v=vs.85).aspx

Web开发人员可能希望禁用其内容的过滤器。他们可以通过设置HTTP标头来实现:

X-XSS-Protection: 0

有关安全标头的更多信息,

答案 3 :(得分:9)

您可以在此List of useful HTTP headers中看到。

  

X-XSS-Protection:此标头可启用内置于最新Web浏览器中的跨站点脚本(XSS)过滤器。它通常默认启用,因此该标题的作用是为该特定网站重新启用过滤器(如果用户已禁用)。 IE 8+和Chrome中支持此标头(不确定是哪个版本)。 Chrome 4中添加了反XSS过滤器。如果该版本符合此标题,则无法识别。

答案 4 :(得分:3)

TL; DR:所有写得好的网站(/ apps)都必须发出标头X-XSS-Protection: 0,而只是忘记了此功能。如果您希望获得更好的用户代理可以提供的额外安全性,请使用严格的Content-Security-Policy标头。

长答案:

HTTP标头X-XSS-Protection是Microsoft在Internet Explorer 8.0(MSIE 8)中引入的那些东西之一,其目的是提高写错网站的安全性。

该想法是应用某种启发式方法来尝试检测反射XSS攻击并自动使攻击中立。

其中有问题的部分是“启发式”和“中性化”。启发式方法会导致误报,绝不能安全地绝育,因为它会导致副作用,这些副作用可用于在完全安全的网站上实施 XSS攻击和DoS攻击。

不好的部分是,如果网站未发出标头X-XSS-Protection,则浏览器的行为就像已发出标头X-XSS-Protection: 1。更糟糕的是,此值是此标头所有可能值中最不安全的值!

对于给定的安全网站(即该网站没有反射XSS漏洞),此“ XSS保护”功能允许受到攻击:

X-XSS-Protection: 1允许攻击者有选择地阻止JavaScript的某些部分并保持其余脚本的运行。这是可能的,因为此功能的启发方式很简单:“如果在页面源的脚本部分中找到任何GET参数的值,则该脚本将以用户代理相关的方式自动进行修改”。实际上,攻击者可以添加参数disablexss=<script src="framebuster.js",浏览器将自动从实际页面源中删除字符串<script src="framebuster.js"。请注意,页面的其余部分继续运行,攻击者只是删除了页面安全性的这一部分。实际上,可以修改页面源中的任何JS。在某些情况下,由于整洁的错误地将纯文本数据转换为可执行的JavaScript代码,因此可以使用没有XSS漏洞且具有反映内容的页面来在页面上运行选定的JavaScript。

X-XSS-Protection: 1; mode=block允许攻击者通过使用页面的行为作为辅助渠道从页面源泄漏数据。例如,如果页面包含var csrf_secret="521231347843"行中的JavaScript代码,则攻击者只需添加一个额外的参数,例如leak=var%20csrf_secret="3,并且如果未阻止页面,则3的第一位数字不正确。攻击者再次尝试,这次leak=var%20csrf_secret="5,页面加载将被中止。这使攻击者知道秘密的第一位是5。然后,攻击者继续猜测下一位。

最后,如果您的站点充满了XSS反射攻击,则使用默认值1将稍微减少攻击面。 但是,如果您的网站是安全的并且没有发出X-XSS-Protection: 0,那么您的网站就会受到任何支持该功能的浏览器的攻击。<​​/ strong>如果您希望浏览器提供深度防御, -您网站上的未知XSS漏洞,请使用严格的Content-Security-Policy标头。这不会使您的网站面临已知漏洞。

当前,默认情况下在MSIE,Safari和Google Chrome中启用此功能。该功能以前在Edge中启用,但在Microsoft already removed this mis-feature from Edge中启用。 Mozilla Firefox从未实现此目的。

另请参阅:

https://homakov.blogspot.com/2013/02/hacking-facebook-with-oauth2-and-chrome.html https://blog.innerht.ml/the-misunderstood-x-xss-protection/ http://p42.us/ie8xss/Abusing_IE8s_XSS_Filters.pdf https://www.slideshare.net/masatokinugawa/xxn-en https://bugs.chromium.org/p/chromium/issues/detail?id=396544 https://bugs.chromium.org/p/chromium/issues/detail?id=498982

答案 5 :(得分:2)

这个标题不知何故被弃用了。您可以在此处阅读更多相关信息 - X-XSS-Protection

<块引用>
  • Chrome 已删除其 XSS 审核器
  • Firefox 没有,也不会实现 X-XSS-Protection
  • Edge 已停用其 XSS 过滤器

这意味着如果你不需要支持旧版浏览器,那就是 建议您在不允许的情况下使用 Content-Security-Policy 改为不安全的内联脚本。