在 HTTP 协议中,Content-Security-Policy
(CSP) 首部字段中的 default
-src
指令可以为其他 CSP 拉取指令(fetch directives)提供备选项。对于以下列出的指令,假如不存在的话,那么用户代理会查找并应用 default-src 指令的值。
child-src
connect-src
font-src
frame-src
img-src
manifest-src
media-src
object-src
script-src
style-src
worker-src
CSP 版本 | 1 |
---|---|
指令类型 | Fetch directive |
语法
default-src
策略允许指定一个或多个源:
Content-Security-Policy: default-src <source>; Content-Security-Policy: default-src <source> <source>;
源
<source> 可以是以下之一:
- <host-source>
- 以域名或者 IP 地址表示的主机名,外加可选的 URL 协议名(URL scheme)以及端口号。站点地址中可能会包含一个可选的前置通配符(星号 '*'),同时也可以将通配符(也是'*')应用于端口号,表示在这个源中可以使用任意合法的端口号。
举例说明:http://*.example.com:
匹配从使用 http: 的 example.com 的任意子域的资源加载。mail.example.com:443:
匹配对 mail.example.com 上的 443 端口号的访问。https://store.example.com
: 匹配对使用了 https: 的 store.example.com 的访问。
- <scheme-source>
- 协议名如'http:' 或者 'https:'。必须带有冒号,不要有单引号。同时你还可以指定数据协议(data schema)(不推荐使用)。
data:
允许data:
URIs 作为内容的源。这是不安全的。攻击者可以注入任意 data: URI 。不要轻易使用这种形式的源,尤其是脚本,绝对不要使用。mediastream:
允许mediastream:
URIs 作为内容的源。blob:
允许blob:
URIs 作为内容的源。filesystem:
允许filesystem:
URIs 作为内容的源。
'self'
- 指向与要保护的文件所在的源,包括相同的 URL scheme 与端口号。必须有单引号。一些浏览器会特意排除 blob 与 filesystem 。需要设定这两种内容类型的站点可以在 Data 属性中进行设定。
'unsafe-inline'
- 允许使用内联资源,例如内联
<script>
元素(javascript: URL)、内联事件处理器以及内联<style>
元素。必须有单引号。 'unsafe-eval'
- 允许使用 eval() 以及相似的函数来从字符串创建代码。必须有单引号。
'none'
- 不允许任何内容。 必须有单引号。
- 'nonce-<base64-value>'
- A whitelist for specific inline scripts using a cryptographic nonce (number used once). The server must generate a unique nonce value each time it transmits a policy. It is critical to provide an unguessable nonce, as bypassing a resource’s policy is otherwise trivial. See unsafe inline script for an example.
- <hash-source>
- 使用 sha256, sha384 或 sha512 编码过的内联脚本或样式。当生成哈希值的时候,不要包含 <script> 或 <style> 标签,同时注意字母大小写与空格——包括首尾空格——都是会影响生成的结果的。参考 unsafe inline script 。
- 'strict-dynamic'
- strict-dynamic 源表达式明确赋予了在标记中出现的脚本文件以信任程度,为它指定一个 nonce 或 hash 值。该值会被传递给所有由根脚本加载的脚本文件。与此同时,任何白名单以及源表达式例如 'self' 或者 'unsafe-inline' 都会被忽略。参见 script-src 。
示例
不继承 default-src 的情况
假如设定了其他指令,那么 default-src
不会对它们起作用。这个首部
Content-Security-Policy: default-src 'self'; script-src https://example.com
与下面这个等价:
Content-Security-Policy: connect-src 'self'; font-src 'self'; frame-src 'self'; img-src 'self'; manifest-src 'self'; media-src 'self'; object-src 'self'; script-src https://example.com; style-src 'self'; worker-src 'self'
规范
Specification | Status | Comment |
---|---|---|
Content Security Policy Level 3 default-src |
Editor's Draft | Added frame-src , manifest-src and worker-src as defaults. |
Content Security Policy Level 2 default-src |
Recommendation | Initial definition. |
浏览器兼容性
The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
Feature | Chrome | Edge | Firefox | Internet Explorer | Opera | Safari |
---|---|---|---|---|---|---|
Basic Support | 25 | 14 | 23.0 | No | 15 | 7 |
Feature | Android | Chrome for Android | Edge mobile | Firefox for Android | IE mobile | Opera Android | iOS Safari |
---|---|---|---|---|---|---|---|
Basic Support | 4.4 | (Yes) | ? | 23.0 | No | ? | 7.1 |