什么是CSP
CSP全称Content Security Policy
,可以直接翻译为内容安全策略,说白了,就是为了页面内容安全而制定的一系列防护策略. 通过CSP
所约束的的规责指定可信的内容来源(这里的内容可以指脚本、图片、iframe、fton、style
等等可能的远程的资源)。通过CSP协定,让WEB处于一个安全的运行环境中。
有什么用?
我们知道前端有个很著名的”同源策略”,简而言之,就是说一个页面的资源只能从与之同源的服务器获取,而不允许跨域获取.这样可以避免页面被注入恶意代码,影响安全.但是这个策略是个双刃剑,挡住恶意代码的同时也限制了前端的灵活性,那有没有一种方法既可以让我们可以跨域获取资源,又能防止恶意代码呢?
答案是当然有了,这就是csp
,通过csp
我们可以制定一系列的策略,从而只允许我们页面向我们允许的域名发起跨域请求,而不符合我们策略的恶意攻-击则被挡在门外.从而实现
需要说明的一点是,目前主流的浏览器都已支持csp
.所以我们可以放心大胆的用了.
目的
csp是一些指令的集合,可以用来限制页面加载各种各样的资源。目前,IE浏览器只支持CSP的一部分,而且仅支持X-Content-Security-Policy header。 相比较而言,Chrome和Firefox则支持CSP的1.0版本,csp的1.1版本则还在开发中。通过恰当的配置csp,可以防止站点遭受很多类型的攻-击,譬如xss和UI补偿等相关问题。
csp总共有10种配置形式,每一种都可以用来限制站点何时加载和加载何种类型的资源。他们分别是:
default-src:这种形式默认设置为 script-src, object-src, style-src, img-src, media-src, frame-src, font-src和connect-src.如果上述设置一个都没有的话,user-agent就会被用来作为default-src的值。
script-src:这种形式也有两个附加的设置。
1、unsafe-inline:允许资源执行脚本。举个例子,on事件的值会被编码到html代码中,或者脚本元素的text的内容会被混入到受保护的资源中。
2、unsafe-eval:允许资源动态的执行函数,比如eval,setTimeout, setInterval, new等函数。
object-src – 决定从哪里加载和执行插件。
style-src – 决定从哪里加载css和样式标记。
img-src – 决定从哪里加载图片。
media-src – 决定从哪里加载视频和音频资源。
frame-src – 决定哪里的frames 可以被嵌入。
font-src – 决定从哪里加载字体。
connect-src – 限制在 XMLHttpRequest, WebSocket 和 EventSource 中可以使用哪些类型的资源。
sandbox – 这是一个可选形式,它决定了沙盒的策略,如何将内容嵌入到沙盒中以保证安全。
当这个策略被特定的url违反了,我们也可以用报告地址直接发送报告。这样做有利于debug和当攻-击发生时通知我们。
此外, 我们可以定义Content-Security-Policy-Report-Only 的 header不强制遵守csp,但是会发送潜在的威胁到一个报告地址。它遵守和csp一样的语法和规则。
正确的设置
View cspplayground.com compliant examples
通常不正确的设置:
View cspplayground.com violation examples
如何检测
在chrome和firefox中打开开发者工具或者firebug,在控制台查看是否有潜在的威胁。
标签:src,HTTP,可以,Content,Policy,Security,csp,资源,加载 From: https://blog.51cto.com/u_15520037/7571796