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

瀏覽器相容性

另見