Content-Security-Policy: default-src 指令

Baseline 已广泛支持

此功能已相当成熟,可在多种设备和浏览器版本上运行。自 ⁨2016 年 8 月⁩ 起,所有浏览器均已提供此功能。

HTTP Content-Security-Policy (CSP) 的 default-src 指令作为其他 CSP fetch 指令的备用方案。对于下列每个缺失的指令,用户代理都会查找 default-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

浏览器兼容性

另见