CSP:style-src
HTTP 的 Content-Security-Policy (CSP) style-src 指令指定樣式表的有效來源。
| CSP 版本 | 1 |
|---|---|
| 指令型別 | 獲取指令 |
default-src 回退 |
是。如果此指令不存在,使用者代理將查詢default-src指令。 |
語法
可以為style-src策略允許一個或多個來源
Content-Security-Policy: style-src <source>;
Content-Security-Policy: style-src <source> <source>;
來源
示例
違規情況
給定此 CSP 標頭
Content-Security-Policy: style-src https://example.com/
以下樣式表將被阻止,並且不會載入
<link href="https://not-example.com/styles/main.css" rel="stylesheet" />
<style>
#inline-style {
background: red;
}
</style>
<style>
@import url("https://not-example.com/styles/print.css") print;
</style>
以及使用Link 標頭載入的樣式
Link: <https://not-example.com/styles/stylesheet.css>;rel=stylesheet
內聯樣式屬性也會被阻止
<div style="display:none">Foo</div>
以及透過 JavaScript 直接設定style屬性或設定cssText來應用的樣式
document.querySelector("div").setAttribute("style", "display:none;");
document.querySelector("div").style.cssText = "display:none;";
但是,直接在元素的style屬性上設定的樣式屬性不會被阻止,允許使用者透過 JavaScript 安全地操作樣式
document.querySelector("div").style.display = "none";
可以透過script-src CSP 指令不允許 JavaScript 來阻止這些型別的操作。
不安全的內聯樣式
注意:不允許內聯樣式和內聯指令碼是 CSP 提供的最大安全優勢之一。但是,如果您絕對必須使用它,則有一些機制將允許它們。
要允許內聯樣式,可以指定'unsafe-inline'、nonce 源或與內聯塊匹配的雜湊源。以下內容安全策略將允許諸如<style>元素和任何元素上的style屬性之類的內聯樣式
Content-Security-Policy: style-src 'unsafe-inline';
以下<style>元素和style屬性將被策略允許
<style>
#inline-style {
background: red;
}
</style>
<div style="display:none">Foo</div>
您可以使用 nonce 源僅允許特定的內聯樣式塊。您需要生成一個隨機的 nonce 值(使用密碼安全的隨機令牌生成器)並將其包含在策略中。需要注意的是,此 nonce 值需要動態生成,因為它必須對每個 HTTP 請求都是唯一的
Content-Security-Policy: style-src 'nonce-2726c7f26c'
您必須在<style>元素上設定相同的 nonce
<style nonce="2726c7f26c">
#inline-style {
background: red;
}
</style>
或者,您可以從內聯樣式建立雜湊。CSP 支援 sha256、sha384 和 sha512。雜湊的二進位制形式必須使用 base64 編碼。您可以在命令列上透過openssl程式獲取字串的雜湊值
echo -n "#inline-style { background: red; }" | openssl dgst -sha256 -binary | openssl enc -base64
您可以使用雜湊源僅允許特定的內聯樣式塊
Content-Security-Policy: style-src 'sha256-ozBpjL6dxO8fsS4u6fwG1dFDACYvpNxYeBA6tzR+FY8='
生成雜湊時,不要包含<style>標籤,並注意大小寫和空格很重要,包括前導或尾隨空格。
<style>
#inline-style {
background: red;
}
</style>
不安全的樣式表示式
'unsafe-eval'源表示式控制幾種從字串建立樣式宣告的樣式方法。如果'unsafe-eval'未與style-src指令一起指定,則以下方法將被阻止,並且不會有任何效果
規範
| 規範 |
|---|
| 內容安全策略級別 3 # directive-style-src |
瀏覽器相容性
BCD 表格僅在瀏覽器中載入