Content-Security-Policy: style-src-attr 指令

Baseline 已广泛支持

此功能已成熟,可跨多个设备和浏览器版本使用。自 2022 年 12 月起,所有浏览器均已提供此功能。

HTTP Content-Security-Policy (CSP) style-src-attr 指令指定了应用于单个 DOM 元素的内联样式的有效源。

此指令不设置 <style> 元素和带有 rel="stylesheet"<link> 元素的有效源。这些源通过 style-src-elem 设置(所有样式的有效源可以通过 style-src 设置)。

CSP 版本 3
指令类型 获取指令
default-src 回退

是的。如果此指令不存在,用户代理将查找 style-src 指令;如果两者都不存在,则回退到 default-src 指令。

语法

http
Content-Security-Policy: style-src-attr 'none';
Content-Security-Policy: style-src-attr <source-expression-list>;

此指令可以具有以下值之一

'none'

不允许加载此类型的任何资源。单引号是强制性的。

<source-expression-list>

一个由源表达式值组成的空格分隔列表。如果资源类型与任何给定的源表达式匹配,则可以加载此类资源。对于此指令,以下源表达式值适用:

style-src-attr 可以与 style-src 结合使用。

http
Content-Security-Policy: style-src <source>;
Content-Security-Policy: style-src-attr <source>;

示例

违规情况

给定此 CSP 头

http
Content-Security-Policy: style-src-attr 'none'

……应用于下方元素的内联样式将不会被应用。

html
<div style="display:none">Foo</div>

此策略还会通过直接设置 style 属性或设置 cssText 来阻止 JavaScript 中应用的任何样式。

js
document.querySelector("div").setAttribute("style", "display:none;");
document.querySelector("div").style.cssText = "display:none;";

直接设置在元素的 style 属性上的样式属性将不会被阻止,从而允许用户通过 JavaScript 安全地操作样式。

js
document.querySelector("div").style.display = "none";

请注意,使用 script-src CSP 指令可能会独立地阻止 JavaScript 的使用。

规范

规范
内容安全策略级别 3
# directive-style-src-attr

浏览器兼容性

另见