0x00 前言
今天在学习DVWA
时,了解到了CSP
这个内容,联想起刚刚在接触web安全
的时候,chrome
无法执行xss
的情况,这里做一个简单的学习记录。
0x01 XSS Auditor
在很久之前我记得在chrome
中做xss
时,会有这样的一个提示。
原来都是通过下面的方法进行关闭的。
在使用浏览器进行xss测试时需要预先关闭xss过滤器
chrome的关闭方法:
我的chrome安装目录在C:\Program Files
(x86)\Google\Chrome\Application\chrome.exe,关闭方法是在命令行输入以下命令:
“C:\Program Files (x86)\Google\Chrome\Application\chrome.exe” --args
–disable-xss-auditor
我的做法是复制上面一行,在桌面新建一个快捷方式,然后把上面一行的代码黏贴到“请键入对象的位置那里”,此处需要注意的是双引号以及双引号内的内容应该为你本身机子内的chrome的安装地址。这样就会在桌面新建一个你关掉了xss过滤器后的新的chrome的快捷方式。
ie和firefox的关闭方法在如下链接:
http://www.phillips321.co.uk/2012/03/01/xss-browser-filters-disabling-it-for-app-testing/
目前来说,已经不需要去关闭了,分别 在xp,win7,win10
都测试过了,都可以成功执行xss
。
原因是XSS Auditor
为chrome
也带了一些其他的漏洞,而且还有误报,所以google
准备删除XSS Auditor
了,启用CSP
之类的新标准。当然还是简单记录下XSS Auditor
的实现原理。
chrome的xss检测名称为 xssAuditor 整合到webkit当中,chrome这么做的原因是因为过滤器可以在脚本执行之前就可以拦截,而且任何使用webkit都可以使用这些规则
当加载网页时,xssAuditor会在渲染的之前评估用户的输入数据:
1.检查用户输入是否包含恶意内容,如果存在进行拦截
2.xssAuditor检测用户是否会反射到渲染的页面中(html实体/html熟悉/javascript/css/url)
3.评估输入上下文是否合法,非法进行过滤
同时还了解到了ie
浏览器的xssFilter
。
IE的xssFilter是在IE8 beta2开始的,IE的xss检测比较粗暴,IE的xssFilter基于正则进行检测的
具体规则存在位于C:\Windows\System32下的mshtml.dll文件中
我们可以使用如下命令进行查看:
findstr /C:"sc{r}" C:\WINDOWS\SYSTEM32\mshtml.dll|find "{"
0x02 CSP
简介
重点还是得来了解这个CSP
,CSP
的实质就是白名单制度,开发者明确告诉客户端,哪些外部资源可以加载和执行,等同于提供白名单。它的实现和执行全部由浏览器完成,开发者只需提供配置。CSP
大大增强了网页的安全性。攻击者即使发现了漏洞,也没法注入脚本,除非还控制了一台列入了白名单的可信主机。
版本
当前,CSP
还处在快速的发展期,目前正在进行规范中的版本是CSP3
,CSP
标准由用户代理选择实现。例如,Chromium
具有完整的CSP2
支持,并且实现了CSP3
的大部分工作草案,仅在某些情况下可能会落后于实验中的某些特性,而MozillaFirefox
和基于WebKit
的浏览器则刚刚获得了完整的CSP2
支持。
还有上图中这种x-*
号的也不推荐去使用了,目前CSP LEVEL1
已经被大部分浏览器所支持。
CSP LEVEL1
涉及到的指令有:
default-src、script-src、style-src、img-src、connect-src、font-src、object-src、media-src、sandbox、report-uri
CSP LEVEL2
加了一些新的指令:
child-src、form-action、frame-ancestors、plugin-types
。对于现在的移动端开发来说,CSP LEVEL2
已经完全可以使用了。
CSP指令
CSP level1
和CSP level2
共列举了15
个指令,其中frame-src
是被废弃的指令,但是浏览器还仍支持。`
CSP指令的取值
实现
在实际使用中,CSP
策略在Content-Security-Policy HTTP
响应头或元素<meta>
中提供。
//响应头
Content-Security-Policy: script-src 'self'; object-src 'none';
style-src cdn.example.org third-party.org; child-src https:
//meta标签
<meta http-equiv="Content-Security-Policy" content="script-src 'self'; object-src 'none'; style-src cdn.example.org third-party.org; child-src https:">
上面代码中,CSP 做了如下配置,启用后,不符合 CSP 的外部资源就会被阻止加载。
脚本:只信任当前域名
<object>标签:不信任任何URL,即不加载任何资源
样式表:只信任cdn.example.org和third-party.org
框架(frame):必须使用HTTPS协议加载
其他资源:没有限制
0x03 相关链接
通过学习,目前掌握了一部分内容,其余的内容通过以后的学习可以更加了解CSP
https://content-security-policy.com/
http://www.ruanyifeng.com/blog/2016/09/csp.html
https://blog.csdn.net/zhouxingxingzxy/article/details/50802908
https://lorexxar.cn/2016/08/08/ccsp/
https://www.cnblogs.com/lmh2072005/p/6044542.html