前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >轻松理解 X-XSS-Protection

轻松理解 X-XSS-Protection

作者头像
信安之路
发布2018-08-08 17:23:26
5.7K0
发布2018-08-08 17:23:26
举报
文章被收录于专栏:信安之路信安之路

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

首先我们来理解一下什么是“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 服务器

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-06-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 信安之路 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • X-XSS-Protection有四种语法:
    • 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 过滤
          • 所以,最优的选项是?
          • 推荐阅读
          相关产品与服务
          网站渗透测试
          网站渗透测试(Website Penetration Test,WPT)是完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标系统的安全做深入的探测,发现系统最脆弱的环节。渗透测试和黑客入侵最大区别在于渗透测试是经过客户授权,采用可控制、非破坏性质的方法和手段发现目标和网络设备中存在弱点,帮助管理者知道自己网络所面临的问题,同时提供安全加固意见帮助客户提升系统的安全性。腾讯云网站渗透测试由腾讯安全实验室安全专家进行,我们提供黑盒、白盒、灰盒多种测试方案,更全面更深入的发现客户的潜在风险。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档