专栏首页信安之路轻松理解 X-XSS-Protection

轻松理解 X-XSS-Protection

本文作者:晚风(信安之路作者团队成员)

首先我们来理解一下什么是“X-XSS-Protection”,从字面意思上看,就是浏览器内置的一种 XSS 防范措施。

没错,这是 HTTP 的一个响应头字段,要开启很简单,在服务器的响应报文里加上这个字段即可。浏览器接收到这个字段则会启用对应的 XSS 防范模块。

IE、Chrome 和 Safari 都内置了这个模块。edge 和火狐没有内置这个模块。

在 IE 上它叫 XSS Filter,在 Chrome 上它叫 XSS Auditor。

这个模块只能检测反射型的 XSS,下文的 XSS 专指反射型的 XSS。

开启这个功能后,当浏览器检测到跨站脚本攻击(XSS)时,浏览器将对页面做清理或直接阻止整个页面的加载。

我觉得在目前这种保护措施还是挺有必要的,虽然现代的浏览器支持强大的 CSP(内容安全策略)来禁用不安全的 JavaScript 脚本,但可能由于 CSP 配置起来较为繁琐或是修改原有的配置成本较高,目前来看还是有很大一部分网站没有用上 CSP,并且对于一些不支持 CSP 的旧版浏览器,X-XSS-Protection 可以为他们提供保护。

X-XSS-Protection有四种语法:

X-XSS-Protection : 0 X-XSS-Protection : 1 X-XSS-Protection : 1; mode=block X-XSS-Protection : 1; report=<reporting-uri>

X-XSS-Protection : 0 表示禁用 XSS 过滤这个功能
X-XSS-Protection : 1 表示启用 XSS 过滤

一般浏览器中都是默认开启。如果检测到跨站脚本攻击,浏览器将清除在页面上检测到的不安全的部分

X-XSS-Protection : 1;mode=block 表示启用XSS过滤器

如果检测到攻击,浏览器不会像上面的选项一样将不安全的部分删除,而是直接阻止整个页面的加载

X-XSS-Protection : 1;report=<reporting-URI> 表示启用 XSS 过滤

如果检测到跨站脚本攻击,浏览器会清除在页面上检测到的不安全的部分,并使用report-uri的功能 POST 一个 XSS 警报。这个功能只有在 Chrome 中有效果,在 IE 中无效。

然后我自己刚刚突发奇想,把选项写成X-XSS-Protection:1;mode=block;report=<reporting-uri>的格式,发现也是可以的。

可以同时阻止页面的加载,也可以发送一个 XSS 警报。注意这里顺序不能错,因为 IE 不支持 report XSS 警报,所以如果mode=block写在最后面的话,在IE中就无法阻止整个页面加载,而是只清除了不安全的代码。

所以,最优的选项是?

看到这里你一定觉得X-XSS-Protection:1;mode=block;report=<reporting-uri>是最优的选项。没错,我也是这么认为的。但是!凡事不是绝对的。在有些情况下,默认开启(X-XSS-Protection:1)的浏览器的 XSS filter/auditor 反而会使我们的页面变得不安全。原因很简单:

  1. XSS filter/auditor 的过滤能力有限。这个模块的原理就是一堆的过滤规则,那就会有被绕过的可能。
  2. 清除能力有限。这个模块会清除不安全的 XSS 代码,这点是毋庸置疑的。但是如果攻击者精心构造了一段代码,在被清除了部分代码后剩下的代码仍然可以构造成恶意代码。 打个简单的比方,我在一段文字中的过滤 'script' 字符串,但是假设我构造了一段 "sscriptcript" 字符串,如果没有循环过滤,那么在过滤后仍然有“script”存在,没过滤干净会导致严重的安全问题。还有可能将无害的标签变成有害的标签。IE 8 中的 XSS 过滤器缺陷就曾经导致了一个 UXSS。

那这么说直接阻止页面加载(X-XSS-Protection:1;mode=block)不就安全了?

不然。这个选项在检测到 XSS 后会直接阻止页面的加载。但有人研究出会导致信息泄露,像这个例子:

https://bugs.chromium.org/p/chromium/issues/detail?id=396544

所以,对网站管理者来说,当你认为你的网页对 XSS 的防御能力已经很优秀了,那你就不需要开启 X-XSS-Protection 这个选项了,把它的值设置为 0 即可。

否则,X-XSS-Protection:1;mode=block;report=<reporting-uri>是你最优的选择。

推荐阅读

我们来聊一聊渗透测试

轻松理解什么是 webshell

轻松理解什么是 SQL 注入

轻松理解什么是 C&C 服务器

本文分享自微信公众号 - 信安之路(xazlsec),作者:晚风

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2018-06-27

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • XSS学习笔记【一】

    非持久型XSS也称反射型XSS。具体原理就是当用户提交一段代码的时候,服务端会马上返回页面的执行结果。那么当攻击者让被攻击者提交一个伪装好的带有恶意代码的链接时...

    信安之路
  • 前端Hack之XSS攻击个人学习笔记

    此篇系本人两周来学习 XSS 的一份个人总结,实质上应该是一份笔记,方便自己日后重新回来复习,文中涉及到的文章我都会在末尾尽可能地添加上,此次总结是我在学习过程...

    信安之路
  • 我是如何找到 Google Colaboratory 中的一个 xss 漏洞的

    在本文中,我来讲讲我碰到的一个有趣的 XSS。2018 年 2 月,我在 google 的一个网络应用中发现了这个 XSS。这篇文章我不希望只是直接写出这个 X...

    信安之路
  • XSS基础(新手篇)

    XSS全称跨站脚本攻击,用户浏览网页时,嵌入的Script代码被执行,从而达到攻击用户的目的,常见漏洞页面,网站搜索页面,留言板。

    网e渗透安全部
  • web安全之XSS攻击

    大象无痕
  • 软件安全性测试(连载3)

    XSS(Cross SiteScripting),由于与层叠样式表(CascadingStyle Sheets,CSS)的缩写混淆。因此一般缩写为XSS。XSS...

    小老鼠
  • 从零开始学web安全(1)

    一直对web安全很感兴趣,却一直只是略懂一点。决定从现在开始学起web安全的知识,更新起web安全系列的文章。文章内容为作者自己边学边写的,不对之处多谢各位大大...

    IMWeb前端团队
  • 一篇文章带你从XSS入门到进阶(附Fuzzing+BypassWAF+Payloads)

    OWASP(开放式Web应用程序安全项目)的工具、文档、论坛和全球各地分会都是开放的,对所有致力于改进应用程序安全的人士开放,其最具权威的就是“10项最严重的W...

    陈殷
  • [经验分享]——XSS 入门介绍

    腾讯云安全
  • BlueLotus-XSS平台源码分享

    Youngxj

扫码关注云+社区

领取腾讯云代金券