首页 > 解决方案 > 没有 src 的 iframe 的 Content-Security-Policy (CSP) 框架祖先

问题描述

我想阻止在 iframe 中托管我的网站(即www.my.com),但域的允许列表(即www.test.comwww.bla.com、...、www.n . com ) 以防止点击劫持。

为了在普通浏览器上实现它,我使用 Content-Security-Policy 并使用 http 和 https 模式发送所有域。对于 IE,我使用引用主机名并根据域的允许列表检查它;如果域存在,我将其添加到 X-Frame-Options;否则,我发送 SAMEORIGIN。例如,假设引用域是www.n.com

X-Frame-Options: ALLOW-FROM https://www.n.com

Content-Security-Policy: frame-ancestors 'self' https://www.test.com https://www.bla.com ... https://www.n.com; http://www.test.com http://www.bla.com ... http://www.n.com;

但是,我想将我的网站托管在另一个网站(在这种情况下为 salesforce),并且该网站不直接在首页托管 iframe,而是创建另一个没有 URL 的 iframe(即,没有 src 属性)并托管我的 iframe 里面:

-> top window: www.n.com
-> -> iframe without src <iframe name="some_name">
-> -> -> iframe with my website <iframe src="https://www.my.com">

浏览器(chrome)阻止我的网站加载,因为:“拒绝框架'https://www.my.com/',因为祖先违反了以下内容安全策略指令......”。

我认为它在 CSP 检查中包含中间 iframe(没有 src),这就是问题所在。

在支持这种情况的同时,如何使用 Content-Security-Policy / X-Frame-Options 保护我的网站免受点击劫持?

更新 如果您正在阅读这个问题 - 我发现 chrome 会忽略空 src 并按预期工作。我错了,顺便错过了另一个域:

-> top window: www.n.com
-> -> iframe with some src <iframe src="https://www.opppsss.com">
-> -> -> iframe without src <iframe name="some_name">
-> -> -> -> iframe with my website <iframe src="https://www.my.com">

您需要将链中的所有域添加到 CSP 标头。

标签: google-chromeinternet-exploreriframecontent-security-policywebsecurity

解决方案


frame-ancestors指令适用于起源元组。

  • 万一<iframe src=http://...事情很容易,并且从src=获取原始元组。

  • 如果<iframe src=data:-Url原点不透明,frame-ancestors则跳过它并检查父项。

  • 如果<iframe name="some_name">其内容是由父页面 javascript 使用.contentDocument属性创建的。因此 iframe 的来源将与父页面相同。

因此,您必须在frame-ancestorsDOM 中指定整个父级升序链的起源。
不幸的是,X-Frame-Options:...标头不适用于多个主机源的情况。

浏览器(chrome)似乎在 CSPv 检查中包含中间 iframe 并阻止我的网站加载。

非常有趣,您是如何知道的……
恕我直言,问题是您的 CSP 是基于referrer. 您referrer希望在以下情况下获得:

-> top window: www.n.com
-> -> iframe without src <iframe name="some_name">
-> -> -> iframe with my website <iframe src="https://www.my.com">

我认为您referrer从最近的父母那里得到了空,因此已发布Content-Security-Policy: frame-ancestors 'self'-> 禁止嵌入到 salesforce 中。


推荐阅读