CSP 指令集

减少 XSS(Cross-site scripting)攻击

或者头, 感觉 meta 灵活点,多页面一致性 header 方便,兼容好


Meta 标签的 Content-Security-Policy-Report-Only 方式在当前(2016/5/19)多数移动端浏览器上表现正常,但是 不推荐 这样做,如 chrome 50 会产生如下的提示

The report-only Content Security Policy xxxxxxx was delivered via a element,which is disallowed. The policy has been ignored.


指令
取值示例
说明
default-src
‘self’ cdn.example.com
定义针对所有类型(js/image/css/web font/ajax/iframe/多媒体等)资源的默认加载策略,某类型资源如果没有单独定义策略,就使用默认。
script-src
‘self’ js.example.com
定义针对JavaScript的加载策略
object-src
‘self’
针对object,embed, 等标签的加载策略
style-src
‘self’ css.example.com
定义针对样式的加载策略
img-src
‘self’ image.example.com
定义针对图片的加载策略
media-src
‘media.example.com’
针对或者引入的html多媒体等标签的加载策略
frame-src
‘self’
针对iframe的加载策略
connect-src
‘self’
针对Ajax、WebSocket等请求的加载策略。不允许的情况下,浏览器会模拟一个状态为400的响应
font-src
font.qq.com
针对Web Font的加载策略
sandbox
allow-forms allow-scripts
对请求的资源启用sandbox
report-uri
/some-report-uri
告诉浏览器如果请求的资源不被策略允许时,往哪个地址提交日志信息。不阻止任何内容,可以改用Content-Security-Policy-Report-Only头
base-uri
‘self’
限制当前页面的url(CSP2)
child-src
‘self’
限制子窗口的源(iframe、弹窗等),取代frame-src(CSP2)
form-action
‘self’
限制表单能够提交到的源(CSP2)
frame-ancestors
‘none’
限制了当前页面可以被哪些页面以iframe,frame,object等方式加载(CSP2)
plugin-types
application/pdf
限制插件的类型(CSP2)

指令值示例及说明

指令值
示例
说明
*
img-src *
允许任何内容
‘none’
img-src ‘none’
不允许任何内容
‘self’
img-src ‘self’
允许同源内容
data:
img-src data:
允许data:协议(如base64编码的图片)
img-src www.a.com
允许加载指定域名的资源
*.a.com
img-src *.a.com
允许加载a.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()
'unsafe-dynamic' script-src 'unsafe-dynamic' 'nonce-$NONCE'
运行加载nonce或hash指定的白名单不安全动态脚本