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 方案和端口号。 你必须包含单引号。 一些浏览器专门从源指令中排除
blob
和filesystem
。 需要允许这些内容类型的网站可以使用 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-src 和 style-src 页面。 'strict-dynamic'
-
strict-dynamic
源表达式指定,明确赋予标记中存在的脚本(通过附带随机数或哈希)的信任将传播到该根脚本加载的所有脚本。 同时,任何允许列表或源表达式(如'self'
或'unsafe-inline'
)都将被忽略。 有关示例,请参阅 script-src。 'report-sample'
-
要求在违规报告中包含违规代码的样本。
'inline-speculation-rules'
-
允许在脚本中包含 推测规则(另请参阅
<script type="speculationrules">
)。
规范
规范 |
---|
内容安全策略级别 3 # framework-directive-source-list |