浅谈CSP
0x00 什么是CSP
CSP是内容安全策略,Conetent Security Policy,主要是为了减缓XSS、clickjacking和其他一些代码注入的攻击,目的是尽量使可执行的内容从可信的目标传递过来。说到CSP,就不得不提到另一种web安全模型:同源策略。
0x01 同源策略
同源策略是为了只允许从同源的目标加载资源,防止恶意代码等。同源的定义是同协议、同域名、同端口。因为现在的web程序中,很多的认证信息是以cookie的方式存到本地,例如存储一个session id。如果我们通过XSS攻击获取到了其他人的session id,就可以登录他人的账号。所以同源策略在一定程度上减缓了XSS的攻击,但是并不能完全阻止。当然CSP也是一样不能完全阻止,下面会讲到一些bypass的方法。
同源策略规则
上面这个表出自wiki,https://en.wikipedia.org/wiki/Same-origin_policy
基本上说明了同源与不同源的情况。但是由于同源策略限制的太过于严格,大多数的网站都有子域名,于是有了一些减缓同源策略的方法,可以使得在某些情况下绕过同源策略,并进行跨域操作。
- document.domain属性
- CORS(Cross-Origin Resource Sharing)
- Cross-document messaging
- JSONP
- WebSocket
0x02 CSP的浏览器支持情况
CSP主要有三个header,分别是:Content-Security-Policy,X-Content-Security-Policy,X-WebKit-CSP
- Content-Security-Policy
chrome 25+,Firefox 23+,Opera 19+ - X-Content-Security-Policy
Firefox 23+,IE10+,但是IE没有完全实现CSP,不知道现在怎么样。 - X-WebKit-CSP
Chrome 25+
我们日常中见到的大部分都为Content-Security-Policy Header,所以其他的两个暂时不提了。
0x03 CSP支持的指令
这里列出一些常用的指令:
default-src,script-src,object-src,style-src,img-src,media-src,frame-src,font-src,connect-src,form-action,sandbox,script-nonce,plugin-types,reflected-xss,report-uri
对于每个指令详细的说明可以参考:http://content-security-policy.com/
0x04 Bypass
关于CSP的绕过方式也比较多了,大部分内容可以参考这个PPT:
http://dl.lightless.me/CSP-kuza55.pptx
师傅能吧bypass的ppt发一下吗?访问没有资源
已补:https://ol72orml7.qnssl.com/CSP-kuza55.pptx