一、作用:

1、限制资源获取:限制网页当中一系列的资源获取的情况,从哪里获取,请求发到哪个地方

限制方式:

default-src限制全局的和链接有关的作用范围

根据资源类型(connect-src、img-src等),限制资源范围

2、报告资源获取越权:在网页当中获取了一些我们不应该获取的资源的时候,给服务进行报告,报告资源获取越权,然后做出调整

之所以报这个错误,就是我们加了这个头的作用。

如果不是inline脚本,而是外链,则

这个头不仅可以限制文件,还可以限制域名。

这个时候 inline脚本还是不能执行的。如果引入外链的脚本文件,则会报错,

这样就可限制,只能使用我们本站使用的脚本。

还可以限制指定某一个网站。

这个文件已经加载成功了。

如果把指定的网站给去掉

浏览器这端就把它限制掉了,不去发送请求。

我们可以限制全局,也可以限制局部的。也可以限制form表单提交的方向。

如果仅仅这么写,点击按钮,是会跳转到zhihu去的,我们要限制只能跳转本站的话,应该是不能跳转成功的。

这样限制,就不会做任何的跳转了。

 

更详细的参见:

内容安全策略( CSP )​developer.mozilla.org/zh-CN/docs/Web/HTTP/CSP

也可以把default-src 换成指定的文件类型,如img-src script-src

我们还可以让它主动向服务器发一个请求,进行汇报

发送的内容是一个标准的csp-report的内容。

不仅可以在HTTP的头里面写,还可以通过在HTML文档中的meta标签来使用。report-uri只能通过HTTP头部去设置,在HTML的meta标签中是无法使用的。

效果是一样的。

更推荐使用HTTP

选项

1、default-src: 可以为其它指令提供备选项

2、child-src:元素加载的嵌套浏览上下文

3、connect-src指令用于控制允许通过脚本接口加载的链接地址,影响下面的

  • <a> ping
  • Fetch
  • XMLHttpRequest
  • WebSocket
  • EventSource

4、font-src字体的地址被阻止

@font-face { 
    font-family: "MyFont"; 
    src: url("https://not-example.com/font"); 
  } 

5、frame-src

        <frame>标签和<iframe>指定源的限制

6、img-srcHTTP 指令指定图像和图标的有效来源

7、manifest-src manifest是一个资源允许的列表

8、media-src <audio><video>元素的有效源

9、object-src

10、script-src <script>标签

11、style-src <style>标签

12、worker-src Worker SharedWorker ServiceWorker

语法:一个或者多个源

Content-Security-Policy: default-src <source>;
Content-Security-Policy: default-src <source> <source>;

<source>可以是以下之一:

1、<host-source>域名或者ip地址表示的主机名,外加可选的URL协议名和端口号,允许在主机名和端口的位置使用通配符*

http://*.example.com

2、<scheme-source>可以直接指定源(二进制文件,数据等)不推荐使用
一下浏览器会特意排除blobfilesystem,可以在这里设置

# data:sssssssss
data:uris
mediastream:uris
blob:uris
filesystem:uris

​​​​​​​3、'self'指定与要保护的文件所在的源,包括相同的URL scheme与端口号。必须有单引号。即同源

4、'unsafe-inline'允许使用内联资源,script标签,javascript: URL之类的

5、'unsafe-eval'允许使用eval()以及相似的函数来创建代码

6、'none'不允许任何内容

7、'nonce-<base64值>'特定使用一次性加密内联的白名单,服务器必须在每一次传输政策时生成唯一的一次性值,否则有安全问题。

8、<hash-source>使用sha256, sha384, sha512编码过得内联脚本或样式

9、strict-dynamic指定对于含有标记脚本(通过附加一个随机数或散列)的信任,应该传播到由该脚本加载的所有脚本。与此同时,任何白名单以及源表达式例如 'self' 或者 'unsafe-inline' 都会被忽略

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐