JAVA年度安全 第七周 内容安全策略

 

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

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值