CSP 内容安全策略

242 阅读2分钟

Content-Security-Policy

Content-Security-Policy: script-src 'self' https://apis.google.com

CSP-Header for different source

  • base-uri: 用于限制可在页面的 <base> 元素中显示的网址
  • child-src: 用户累出适用于网络县城和嵌入frame的网址。
  • connect-src: 用于限制可连接(XHR, WebSockets, EventSource)的来源。
  • font-src: 用于制定可提供网页字体的来源。
  • form-action: 用户列出可从标记提交的有效端点。
  • frame-ancestors: 用户制定可嵌入当前页面的来源。此指令适用于 <frame><iframe><embed><applet> 标记。此指令不能在 <meta> 标记中使用,并仅适用于非 HTML 资源。
  • frame-src: 已弃用,改用 child-src
  • img-src: 用于定义可从中加载图像的来源。
  • media-src: 用于限制允许传输视频和音频的来源。
  • object-src: 可对 Flash 和其他插件进行控制。
  • plugin-types: 用于限制页面可以调用的插件种类。
  • report-uri: 用于制定在违反内容安全策略时浏览器向其发送报告的地址。此指令不能用于 <meta> 标记。
  • style-srcscript-src 版的样式表。
  • upgrade-insecure-requests: 指示 User Agent 将 HTTP 更改为 HTTPS,重写网址架构。[这个指令可以修复页面中混入的资源]
  • block-all-mixed-content: 用户限制页面访问不同协议的资源,例如在HTTPS的协议下无法获取使用HTTP协议的资源。
  • work-src: 是 CSP Level 3 的指令,用于限制 worker, shared worker 和 service worker。

CSP value for header

  1. 'none': 不匹配。
  2. 'self': 匹配当前源,但是不包括子域名。
  3. 'unsafe-inline': 允许内敛 JS 和 CSS。
  4. 'unsafe-eval': 允许 text-to-Javascript 机制。
  5. 'sandbox': 该指令与我们看到的其他指令有些不同,因为它限制的是页面可进行的操作,而不是页面可加载的资源。

Config CSP with the meta tag

<meta
    http-equiv="Content-Security-Policy"
    content="
            default-src https://cdn.example.net;
            child-src 'none';
            object-src 'none'"
>

frame-ancestors, report-uri, or sandbox 无法通过meta来配置。

防御XSS攻击

内敛脚本的执行是XSS攻击的常用手段,通过严格的CSP配置可以防止内敛脚本的执行,同时也能通过对应的 form-action 来限制跨域表单的提交问题。

如果一定要使用内敛脚本,可以配置 script-src: 'unsafe-inline' 来允许内敛脚本的运行,但是最好在对应的执行script标签上添加对应的nonce来添加进一步的许可,这样能更好的防范XSS。


Content Security Policy | Web Fundamentals | Google Developers

Content Security Policy Level 3