CSP 源值

HTTP Content-Security-Policy (CSP) 头部指令指定资源可以从哪些 <source> 加载,可以使用下面列出的任何一个值。相关的指令包括 获取指令,以及下面 列出的其他指令

来源

<host-source>

互联网主机名称或 IP 地址。 URL 方案、端口号和路径是可选的。 通配符 ('*') 可用于子域、主机地址和端口号,表示每个合法值都是有效的。 当匹配方案时,允许安全升级(例如,指定 http://example.com 将匹配 https://example.com)。示例

  • http://*.example.com: 匹配所有尝试从 example.com 的任何子域加载的请求。 还匹配 https 资源。
  • mail.example.com:443: 匹配所有尝试从 mail.example.com 上的端口 443 加载的请求。
  • https://store.example.com: 匹配所有尝试使用 https: 访问 store.example.com 的请求。
  • *.example.com: 匹配所有尝试从 example.com 的任何子域加载的请求。
  • https://*.example.com:12/path/to/file.js: 匹配所有尝试使用 https: 从 example.com 的任何子域加载的请求,并且仅当路径为 /path/to/file.js 时。
  • ws://example.com: 匹配所有尝试使用 ws: 从 example.com 加载的请求。 还匹配 wss 资源。
  • https://example.com/subdirectory: 匹配所有尝试加载确切路径 https://example.com/subdirectory 的请求。
  • https://example.com/subdirectory/: 匹配所有尝试加载 subdirectory 目录下文件的请求。 例如,https://example.com/subdirectory/path/to/file.js。 它不匹配 https://example.com/path/to/file.js

有关路径匹配方式的更多详细信息,请参阅规范中的 部分匹配算法

<scheme-source>

一个方案,例如 http:https:。 冒号是必需的。 与下面的其他值不同,不应使用单引号。 你还可以指定数据方案(不推荐)。

  • data: 允许使用 data: URL 作为内容来源。 这并不安全;攻击者还可以注入任意 data: URL。 谨慎使用此方法,绝对不要用于脚本。
  • mediastream: 允许使用 mediastream: URI 作为内容来源。
  • blob: 允许使用 blob: URI 作为内容来源。
  • filesystem: 允许使用 filesystem: URI 作为内容来源。

注意: 如果缺少方案来源,则使用文档来源的方案。 允许安全升级,因此,如果文档使用 https: 加载,那么 example.com 将匹配 https://example.com 但不匹配 http://example.com。 有关更多信息,请参阅 CSP Level 3

'self'

指的是提供受保护文档的来源,包括相同的 URL 方案和端口号。 你必须包含单引号。 一些浏览器专门从源指令中排除 blobfilesystem。 需要允许这些内容类型的网站可以使用 Data 属性指定它们。

'unsafe-eval'

允许使用 eval() 和其他不安全方法从字符串创建代码。 你必须包含单引号。

'wasm-unsafe-eval'

允许加载和执行 WebAssembly 模块,而无需通过 'unsafe-eval' 也允许不安全的 JavaScript 执行。 单引号是必需的。

'unsafe-hashes'

允许启用特定内联 事件处理程序。 如果你只需要允许内联事件处理程序,而不是内联 <script> 元素或 javascript: URL,与使用 unsafe-inline 表达式相比,这是一种更安全的方法。

'unsafe-inline'

允许使用内联资源,例如内联 <script> 元素、javascript: URL、内联事件处理程序和内联 <style> 元素。 单引号是必需的。

'none'

指的是空集;也就是说,没有 URL 匹配。 单引号是必需的。

'nonce-<base64-value>'

使用密码随机数(一次性使用数字)为特定内联脚本创建允许列表。 服务器必须在每次传输策略时生成一个唯一的随机数。 为提供不可猜测的随机数至关重要,因为否则绕过资源的策略将是微不足道的。 请参阅 不安全的内联脚本 以获取示例。 指定随机数会使现代浏览器忽略 'unsafe-inline',而 'unsafe-inline' 仍然可以为不支持随机数的旧浏览器设置。

注意: CSP nonce 来源只能应用于可随机数元素(例如,由于 <img> 元素没有 nonce 属性,因此无法将其与此 CSP 来源相关联)。

'<hash-algorithm>-<base64-value>'

脚本或样式的 sha256、sha384 或 sha512 哈希。 此值由用于创建哈希的算法、连字符和脚本或样式的 Base64 编码哈希组成。 生成哈希时,请排除 <script> 或 <style> 标记,并注意大小写和空格很重要,包括前导或尾随空格。 在 CSP 2.0 中,哈希源可以应用于内联脚本和样式。 在 CSP 3.0 中,哈希源表达式允许用于 script-src 指令中的外部脚本。 有关更多信息和示例,请参阅 script-srcstyle-src 页面。

'strict-dynamic'

strict-dynamic 源表达式指定,明确赋予标记中存在的脚本(通过附带随机数或哈希)的信任将传播到该根脚本加载的所有脚本。 同时,任何允许列表或源表达式(如 'self''unsafe-inline')都将被忽略。 有关示例,请参阅 script-src

'report-sample'

要求在违规报告中包含违规代码的样本。

'inline-speculation-rules'

允许在脚本中包含 推测规则(另请参阅 <script type="speculationrules">)。

规范

规范
内容安全策略级别 3
# framework-directive-source-list

相关指令