CSP是由单词 Content Security Policy 的首单词组成,是HTML5带给咱们的一套全新主动防护的体系,旨在减小(注意这里是减小而不是消灭)跨站脚本攻击。
CSP是一种由开发者定义的安全性政策性申明,经过CSP所约束的的规责指定可信的内容来源(这里的内容能够指脚本、图片、iframe、fton、style等等可能的远程的资源)。经过CSP协定,让WEB处于一个安全的运行环境中。html
CSP定义了 Content-Security-Policy HTTP头来为你的内容建立一个来源的白名单。浏览器只容许白名单域里的资源和代码执行。这样就算攻击者找到了一个漏洞注入脚本,脚本不在白名单里面照样没法执行。
举例说明:
咱们信任m.58.com的代码,咱们能够这样定义咱们的协议
Content-Security-Policy: script-src 'self' http://m.58.com
script-src控制script标签相关的策略,咱们指定了'self'和http://m.58.com做为他的值,浏览器只会下载并执行本域和http://m.58.com的脚本。
更多指令介绍:web
connect-src
限制使用XHR,WebSockets,和EventSource的链接源。chrome
font-src
指定字体的下载源。segmentfault
frame-src
指定frame能够嵌入的链接源。浏览器
img-src
指定图片的加载源。安全
media-src
指定video和audio的数据源。dom
object-src
指定Flash和其余插件的链接源。ide
style-src
指定link的链接源。和script-src相似。post
默认若是你不指定这些指令的值,将容许全部的来源,例如 font-src:*和不写font-src是等价的。
固然你也能够重写默认值,只要使用default-src就能够。好比:指定了default-src:https://example.com 可是没有指定font-src,那么你的font-src也只能从https://example.com加载。在以前的例子中咱们只指定了script-src,这说明咱们能够从任何其余的地方加载image,font和其余资源。
你能够为你的web应用指定多个或者一个指令,只须要在HTTP头里面列出来这些值,不一样的值之间用“;”来分隔。可是若是你写成 script-src https://host1.com;script-src:https://host2.com,那么第二个script-src将不起做用,正确的写法是:script-src https://host1.com https://host2.com 。
再举一个例子:若是你的静态资源全都来自一个CDN,而且你知道不会有frame和其余插件。你能够这样写
Content-Security-Policy:default-src https://cdn.example.net;frame-src 'none';object-src:'none'
关键词:字体
'none'
什么都不匹配。
'self'
匹配当前的域,不包括子域。
'unsafe-inline'
容许inline JavaScript 和 CSS。
'unsafe-eval'
容许 eval,new Function等的执行。
这几个关键词须要用单引号引用起来,若是不引用,则会被认为是域名。
详细内容参考:http://content-security-policy.com/
使用CSP时,Web应用能够经过提供一个Content-Security-Policy HTTP头或一个META的HTML元素.不过这样的政策只在当前文档适用而已。
META使用示例:
<meta http-equiv="Content-Security-Policy" content="default-src *.tanx.com *.mmstat.com *.meituan.com https://i.meituan.com/ https://ms0.meituan.com https://mc0.meituan.com 192.168.4.223:9999 *.maoyan.com *.meituan.net www.google-analytics.com wvjbscheme://* imeituan://* *.dianping.com *.dpfile.com 'self' 'unsafe-inline' 'unsafe-eval' blob: data:;">
chrome里查看页面用到哪些域名:
CSP 目前有两版:CSP1和CSP2(有些指令是属于CSP2,好比:child-src、form-action等,详见http://content-security-policy.com/)。
两版的支持状态能够在http://caniuse.com/#search=csp
中查到。
http://www.zhihu.com/question/21979782
http://www.2cto.com/Article/201408/327064.html
https://imququ.com/post/content-security-policy-reference.html
http://www.javashuo.com/article/p-qljfxjeo-gt.html
http://content-security-policy.com/