Bypass_Csp

什么是CSP

内容安全策略(Content Security Policy,简称CSP)是一种以可信白名单作机制,来限制网站中是否可以包含某来源内容。默认配置下不允许执行内联代码,用来减少XSS攻击。

CSP语法

CSP指令

指令 示例 说明
default-src ‘self’ cdn.example.com 定义对所有类型的默认加载策略,如果没有单独定义策略,就执行默认策略
script-src ‘self’ js.example.com 定义对js的加载策略
style-src ‘self’ css.example.com 定义对样式表的加载策略
img-src ‘self’ img.example.com 定义对图片的加载策略
connect-src ‘self’ 针对Ajax/Websocket等请求的加载策略,不允许的情况下,浏览器会模拟一个状态为400的响应
font-src font.example.com 定义对字体的加载策略
object-src ‘self’ 定义对引用资源的加载策略,如<object><embed><applet>
frame-src ‘self’ 定义对frame的加载策略,建议改用child-src
media-src media.example.com 定义对音频和视频的加载策略

CSP语法

指令值 指令示例 说明
* img-src * 允许加载所有资源
‘none’ img-src ‘none’ 不允许加载一切资源
‘self’ img-src ‘self’ 只允许加载同源的资源
data img-src data 允许data:协议加载资源(如base64编码的图片)
www.a.com img-src img.a.com 允许加载指定域名的资源
*.a.com img-src *.a.com 允许加载a.com任何子域的资源
https://img.com img-src https://img.com 允许加载img.com的https资源
https: img-src https: 允许加载https资源
‘unsafe-inline’ script-src ‘unsafe-inline’ 允许加载inline资源(如常见的style属性,onclick,inline js和inline css等等)
‘unsafe-eval’ script-src ‘unsafe-eval’ 允许加载动态js代码如 eval()函数

CSP例子

只允许加载同源资源

1
Content-Security-Policy: default-src 'self'

只加载同源的和子域的资源

1
Content-Security-Policy: default-src 'self' *.mydomain.com

github

Github允许加载任何域的内容,但只能加载指定域的脚本,只能加载指定域的样式并可以执行内联样式,只能通过SSL加载指定域的flash插件

1
Content-Security-Policy:default-src *; script-src 'self' https://github.global.ssl.fastly.net https://ssl.google-analytics.com https://collector-cdn.github.com https://embed.github.com https://raw.github.com; style-src 'self' 'unsafe-inline' https://github.global.ssl.fastly.net; object-src https://github.global.ssl.fastly.net

Bypass_Csp

一种安全策略的出生,避免不了怎么想着去Bypass