Content-Security-Policy: default-src 指令
HTTP Content-Security-Policy
(CSP) 的 default-src
指令作为其他 CSP fetch 指令的备用方案。对于下列每个缺失的指令,用户代理都会查找 default-src
指令并使用其值。
child-src
connect-src
font-src
frame-src
img-src
manifest-src
media-src
object-src
prefetch-src
script-src
script-src-elem
script-src-attr
style-src
style-src-elem
style-src-attr
worker-src
CSP 版本 | 1 |
---|---|
指令类型 | 获取指令 |
语法
http
Content-Security-Policy: default-src 'none';
Content-Security-Policy: default-src <source-expression-list>;
此指令可以具有以下值之一
'none'
-
不允许加载任何资源。单引号是必需的。
<source-expression-list>
-
由空格分隔的源表达式值列表。如果资源与任何给定的源表达式匹配,则可以加载。对于此指令,Fetch 指令语法中列出的任何源表达式值都适用。
示例
不继承 default-src
如果指定了其他指令,default-src
不会影响它们。以下头部
http
Content-Security-Policy: default-src 'self'; script-src https://example.com
与此相同
http
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'
Firefox default-src: none
SVG 雪碧图阻止问题
注意: 此问题已在 Firefox 132 中修复;请参阅 bug 1773976。
创建 CSP 时,可以从 default-src 'none'
开始,以锁定所有资源加载,然后添加更多指令来开放策略,从而只允许加载所需的资源。例如,仅允许同源图像加载:
http
Content-Security-Policy: default-src 'none'; img-src 'self'
然而,这里有一个问题。如果你通过 <use>
元素嵌入外部文件中定义的 SVG 雪碧图,例如
svg
<svg>
<use href="/images/icons.svg#icon"/>
</svg>
如果你设置了 default-src 'none'
策略,你的 SVG 图像将在 Firefox 中被阻止。Firefox 不像其他浏览器那样将 SVG 视为嵌入式图像,因此 img-src 'self'
将不允许它们加载。如果你希望外部雪碧图在 Firefox 中加载,你需要使用 default-src 'self'
。
或者,如果 default-src 'none'
策略是硬性要求,你可以将 SVG 雪碧图内联到 HTML 页面中:
html
<body>
<svg style="display: none">
<symbol id="icon" viewBox="0 0 24 24">
<path d="…" />
</symbol>
</svg>
…
<svg>
<use href="#icon" />
</svg>
</body>
规范
规范 |
---|
内容安全策略级别 3 # directive-default-src |
浏览器兼容性
加载中…