http://www.jtmelton.com/2012/02/14/year-of-security-for-java-week-7-content-security-policy/
What is it and why should I care?
内容安全策略(CSP)由Mozilla推出的新技术,在WEB应用上新增一个防护层,主要用于XSS攻击,同时也能防护点击劫持攻击。
OWASP针对普通XSS(https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet)和基于DOM的XSS(https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet)的防护手册已经证明了解决XSS是一个复杂的事情。 CSP通过以下几点方式来帮助应用开发者解决XSS问题。
Whitelist Content Locations内容白名单
XSS危害性大的原因是浏览器完全信任来自于服务器的内容,即使这个内容已经被篡改过,或者来自于一个意料外的地址。这也是CSP要解决的问题:应用开发人员声明一个可行内容地址的白名单,实现CSP标准的浏览器只信任从白名单地址加载的内容,忽略非白名单地址提供的可执行内容。
No Inline Scripts禁止内联脚本
XSS的一种方式是在内容中添加内联脚本,因为浏览器无法区分这些内联脚本是服务器发送的,还是攻击者植入的。CSP强制性要求脚本和内容分置到不同的文件上。这意味着开发人员必须把脚本放到另外的文件上,很多应用需要重新开发(twitter是一个遵循CSP的案例)。基于上述CSP的规则,成功实施XSS攻击,攻击者需要如下操作:
第一步:在页面上植入一个脚本tag
第二步:确保脚本tag加载的资源网站地址在白名单中
第三步:保证脚本tag加载的资源在这个网站中。
这些步骤是XSS攻击非常麻烦。
注意:CSP无法阻止基于事件的XSS脚本攻击,例如onXXX处理器或者addEventListener方式
No Code From Strings (eval dies)禁止eval执行
另一个有意义的规则是禁止从字符串创建代码。这意味着eval(以及类似功能的函数)不能被使用。通过字符串创建代码是一种流行的攻击方式,而且基本上无法跟踪。所以移除此类函数帮助很大。
这个规则带来的问题是如何处理JSON解析。从安全的角度上来说,正确的做法就是根据JSON的数据格式来解析而不是使用eval,因此影响不大。
Policy Violation Reporting违反规则报告
CSP有特色的地方在于可以为网站配置一个处理违反规则的处理器,在报表模式和强制模式下都能提供数据。当启动CSP的报表模式,可以记录网站上所有被阻止的地址(适用于测试)。强制模式下,不仅能汇总数据,同时也是一个简易的XSS探测方式(生产环境使用,不执行XSS脚本)。
Whatshould I do about it?
CSP没有任何不良特性,你应该使用CSP,能够是网站更安全。即使浏览器不支持CSP,CSP规则也不会对浏览器有任何影响,不能因为浏览器而放弃CSP。
使用CSP的基本流程:
1、 通过基本安全开发规则来防护XSS
2、 学习CSP-阅读CSP规范
3、 修改网站的代码并且测试验证(需要开发量)
4、 在报表模式下监控违反规则的地方,并且修复这些问题(如果测试充分,可以省掉这一步)
5、 确认报表模式下没有问题,切换为强制模式
有2种常用方式在代码中实现CSP:HTTP报文头和META Tag。HTTP报文头的方式更常用,示例如下:
Content-Security-Policy: default-src'self';
img-src *;
object-src media1.example.com media2.example.com *.cdn.example.com;
script-src trustedscripts.example.com;
report-uri http://example.com/post-csp-report
示例说明:
第一行:默认只允许来自网站自身的内容
第二行:允许使用任意网站的图片
第三行:只允许使用指定网站提供的数据
第四行:只使用trustedscripts.example.com提供的脚本
第五行:向这个地址汇集违反CSP规则的操作
CSP是一个有趣又好用的、用于解决XSS的技术,很应该加到你的工具库中。
References
———–
https://developer.mozilla.org/en/Introducing_Content_Security_Policy
https://dvcs.w3.org/hg/content-security-policy/raw-file/tip/csp-specification.dev.html
https://wiki.mozilla.org/Security/CSP/Design_Considerations
https://wiki.mozilla.org/Security/CSP/Specification
https://dvcs.w3.org/hg/content-security-policy/raw-file/bcf1c45f312f/csp-unofficial-draft-20110303.html
http://www.w3.org/TR/CSP/
http://blog.mozilla.com/security/2009/06/19/shutting-down-xss-with-content-security-policy/
https://mikewest.org/2011/10/content-security-policy-a-primer
http://codesecure.blogspot.com/2012/01/content-security-policy-csp.html
https://www.owasp.org/index.php/XSS_%28Cross_Site_Scripting%29_Prevention_Cheat_Sheet
https://www.owasp.org/index.php/DOM_based_XSS_Prevention_Cheat_Sheet
http://blog.spiderlabs.com/2011/04/modsecurity-advanced-topic-of-the-week-integrating-content-security-policy-csp.html