CSP:frame-ancestors

HTTP Content-Security-Policy (CSP) 的 frame-ancestors 指令指定了可以使用 <frame><iframe><object><embed> 嵌入页面的有效父级。

将此指令设置为 'none' 类似于 X-Frame-Options: deny(在旧浏览器中也支持)。

注意:frame-ancestors 允许您指定哪些父源可以嵌入页面。这与 frame-src 不同,后者允许您指定页面中的 iframe 可以从何处加载。

CSP 版本 2
指令类型 导航指令
default-src 回退 否。不设置此项允许任何内容。
此指令在 <meta> 元素中不受支持。

语法

可以为 frame-ancestors 策略设置一个或多个源

http
Content-Security-Policy: frame-ancestors <source>;
Content-Security-Policy: frame-ancestors <space separated list of sources>;

来源

<source> 可以是以下之一

注意:frame-ancestors 指令的语法类似于其他指令的源列表(例如 default-src),但例如不允许 'unsafe-eval''unsafe-inline'。它也不会回退到 default-src 设置。只允许下面列出的源

<host-source>

Internet 主机按名称或 IP 地址,以及可选的 URL 方案和/或端口号,用空格分隔。站点地址可以包含可选的前导通配符(星号字符,'*'),您也可以使用通配符(再次是 '*')作为端口号,表示所有合法端口对源都是有效的。不允许对主机使用单引号。例子

  • http://*.example.com:匹配所有尝试使用 http: URL 方案从 example.com 的任何子域加载。
  • mail.example.com:443:匹配所有尝试访问 mail.example.com 上的 443 端口。
  • https://store.example.com:匹配所有尝试使用 https: 访问 store.example.com。

警告:如果未为 host-source 指定 URL 方案,并且 iframe 从 https URL 加载,则加载 iframe 的页面的 URL 也必须是 https,根据 URL 是否与具有重定向计数的来源表达式匹配? CSP 规范的章节。

<scheme-source>

例如 http:https: 这样的方案。冒号是必需的,并且方案不应被引用。您还可以指定数据方案(不推荐)。

  • data: 允许 data: URL 用作内容源。这是不安全的;攻击者还可以注入任意的 data: URL。谨慎使用此功能,并且绝对不要用于脚本。
  • mediastream: 允许 mediastream: URI 用作内容源。
  • blob: 允许 blob: URI 用作内容源。
  • filesystem: 允许 filesystem: URI 用作内容源。
'self'

指的是提供受保护文档的来源,包括相同的 URL 方案和端口号。您必须包含单引号。一些浏览器明确地将 blobfilesystem 排除在源指令之外。需要允许这些内容类型的网站可以使用 Data 属性指定它们。

'none'

指的是空集;也就是说,没有 URL 匹配。单引号是必需的。

示例

http
Content-Security-Policy: frame-ancestors 'none';

Content-Security-Policy: frame-ancestors 'self' https://www.example.org;

Content-Security-Policy: frame-ancestors 'self' https://example.org https://example.com https://store.example.com;

规范

规范
内容安全策略级别 3
# directive-frame-ancestors

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅