一、从两个工具说起
最近Google又推出了两款有关CSP利用的小工具,其一为CSP Evaluator,这是一个能够评估你当前输入的CSP能否帮助你有效避免XSS攻击的工具,其用法非常简单,在输入框中输入你当前设置或将要设置的CSP值,选择需要验证的CSP版本,然后按下“CHECK CSP”即可。不知道CSP是什么的同学,可以看下阿里聚安全博客以前推送的一篇文章《Content Security Policy 入门教程》
下面的列表中会给出评估工具对你输入CSP的安全性评估,所有条目用不同颜色标记了可能的影响程度。并且每个条目都可以单击展开详情,以按照建议修复可能存在的缺陷。如图:
CSP Evaluator还存在一个Chrome插件版本,同样易于使用。在使用了CSP的网站上单击扩展图标就可以自动对当前页面的CSP进行评估。
另一款工具为CSP Mitigator,这款Chrome插件允许您将自定义CSP策略应用于应用程序。 它可以帮助您了解启用CSP的后果,识别与您的策略不兼容的应用程序部分,并指导您在部署前进行任何必要的更改。效果图在Chrome商店中有,这里就不再赘述了。
可以看到,Google仍然在不遗余力地推行CSP的发展与应用。在CSP Evaluator的页面中,我们看到Google相关团队进行了一项规模巨大的研究来对CSP的现状进行了深入的分析,并基于这些结果,剖析了CSP的优缺点,并对CSP未来的发展给出了结论。就让我们跟随这篇文章,来看看CSP在今世的表现与CSP的未来是否可以期待。
二、庐山真面目 —— 何为CSP
为了研究CSP(Content Security Policy)对XSS攻击的防护作用,他们做了对CSP安全模型的首次深入分析,分析了CSP标准中对web缺陷的保护能力,帮助识别常见的CSP策略配置的可能错误,并且展示了三类能使CSP无效化的绕过方法。
这次研究所采用的材料基于从Google搜索的索引文件中所提取到的CSP策略,从语料库中提取了大约1060亿页的页面,其中39亿是受CSP保护的,其中确认了26,011个独立的策略。他们发现,由于策略配置错误和白名单条目不安全,这些策略中至少有94.72%无法缓解XSS攻击。基于这样的研究结果,他们建议在实践中部署CSP时,使用基于nonce的方法而不是传统的白名单。并且,他们提出了名为“strict dynamic”的新特性,这是当前在Chromium浏览器中实现的CSP3规范的一个新特性。以下会详细讲述为何要使用这种策略和特性。
首先,何为CSP?我们知道,内容安全策略(CSP)是一种声明机制,允许Web开发者在其应用程序上指定多个安全限制,由支持的用户代理(浏览器)来负责强制执行。CSP旨在“作为开发人员可以使用的工具,以各种方式保护其应用程序,减轻内容注入漏洞的风险和减少它们的应用程序执行的特权”。当前,CSP还处在快速的发展期,目前正在进行规范中的版本是CSP3,CSP标准由用户代理选择实现。例如,Chromium具有完整的CSP2支持,并且实现了CSP3的大部分工作草案,仅在某些情况下可能会落后于实验中的某些特性,而Mozilla Firefox和基于WebKit的浏览器则刚刚获得了完整的CSP2支持。在实际使用中,CSP策略在Content-Security-Policy HTTP响应头或元素中提供。
CSP的能力可以分为三类:
1. 资源加载限制。 CSP的最广为人知和常用的方面是将各种子资源的加载限制到开发人员允许的一组源的能力,这组源称为源列表。 常用的指令是script-src,style-src,img-src和兜底的 default-src; 调节资源的指令的完整列表如下表1所示。作为特殊情况,script-src和style-src指令还有几个额外的配置选项可用; 这些选项允许对脚本和样式表进行更细粒度的控制。
2. 基于URL的限制。 某些类型的攻击不能通过管理子资源来防止,但与之类似,对于文档也需要有可以与之交互的可信来源的概念。 一个常见的例子是frame ancestors指令,它定义了允许的框架来源,以防止点击劫持。 类似地,base-uri和form-action定义哪些URL可以是