--- title: 内容安全策略(CSP) createTime: 2020/08/28 03:25:32 author: pengzhanbo tags: - http - 安全 permalink: /article/snkdmwsz/ --- 内容安全策略(`Content-Security-Policy`),简称 `CSP`。是一种 计算机安全标准。 主要目标是 减少和报告XSS攻击、数据注入攻击等。这些攻击手段的主要目的是盗取网站数据、网站内容污染、散发恶意软件等。 几乎所有现在浏览器都支持 `CSP`, 对于不支持的浏览器,则会忽略 `CSP`。 ## XSS攻击 XSS攻击是一种常见的、危害极大的网络攻击手段。它利用浏览器对从服务器获取的内容的信任, 通过站点的 `script` 脚本、内联脚本、外部导入资源等方式进行注入攻击。 恶意脚本在受害者浏览器中执行,以达成其目的。 ## CSP `CSP` 通过 **有效域名**,即 **浏览器认可的可执行脚本的有效来源** ,使 服务器管理者有能力消除或减少 XSS 攻击所以来的载体。 支持 `CSP` 的浏览器,仅会执行从白名单域名加载的脚本文件,忽略其他所有脚本,包括内联脚本和 HTML 事件处理属性。 ## 制定策略 `CSP` 通过 声明 HTTP 头部字段 `Content-Security-Policy` 来启用和配置策略: ``` Content-Security-Policy: policy; Content-Security-Policy: policy; policy; ``` 参数 `[policy]` 是一个包含了描述 各种CSP策略指令的字符串。 ## 策略指令 ### default-src 为其他CSP指令提供备选项,如果其他指令不存在,用户代理会查找并应用该值,如果其他指令有配置值,那么则不会应用 default-src的值。 default-src 策略允许指定一个或多个值: ``` Content-Security-Policy: default-src ; Content-Security-Policy: default-src ; ``` ### script-src 脚本内容安全策略指令,包括限制 外部资源、内联脚本、eval函数。 ``` Content-Security-Policy: script-src ``` ### style-src CSS文件内容安全策略指令,包括限制 内联样式表、通过`` 引入的css文件、样式中通过 `@import` 导入的css文件、 元素的 `style` 属性、 `style.cssText` 属性、以及 `el.setAttribute('style', '')` ``` Content-Security-Policy: style-src ``` ### img-src 图片资源内容安全策略指令, 限制通过 `` 加载的图片资源 ``` Content-Security-Policy: img-src ``` ### media-src 媒体资源内容安全策略指令,限制通过 `