CSP 内容安全策略笔记

CSP(Content-Security-Policy)内容安全策略,主要用于预防常见的Web攻击,如XSS攻击、数据注入攻击等。服务端通过设置响应报文的Content-Security-Policy字段,控制浏览器可以为该页面获取哪些资源,下面是一些常用的设置示例

default-src

default-src 用于控制网页中资源的安全性

// 允许使用内联 JavaScript 和 CSS
Content-Security-Policy: default-src 'unsafe-inline'

// 允许使用类似 eval 的 text-to-JavaScript 机制
Content-Security-Policy: default-src 'unsafe-eval'

// 必须与当前来源(而不是其子域)匹配
Content-Security-Policy: default-src 'self'

// 不执行任何匹配,所有内联、外联的JS和CSS等资源都不允许引入
Content-Security-Policy: default-src 'none'

上面的关键字需要使用单引号,多个属性值用空格分割。除此之外也可以通过特定的条件限制访问源,比如只允许https、或者只允许某些特定网址

// 只信任 https://cdn.example.net 和 https://api.example.net 的资源
Content-Security-Policy: default-src https://cdn.example.net https://api.example.net;

// 只允许https资源
Content-Security-Policy: default-src https

上面列出的关键字和策略适用于所有的资源安全控制,比如script-srcstyle-srcimg-src

script-src

script-src 用于控制网页中JS的安全性

// nonce-<base64-value>: 允许某个特定的内联脚本
Content-Security-Policy: default-src 'self'; script-src nonce-'asdf'
<script nonce="asdf">
  console.log('inline script')
</script>

img-src

// 允许 example.com 下的所有图片资源
Content-Security-Policy: img-src https://*.example.com

除了上面列出的这些策略,还有很多可以控制的指令,具体可已参考MDN文档,平时用的较多的是script-srcdefault-src

参考文章

谷歌开发文档-内容安全政策
MDN-内容安全政策

原文地址:https://www.cnblogs.com/yesyes/p/15375864.html