【发布时间】:2021-06-02 04:44:01
【问题描述】:
我想防止在 iframe 中托管我的网站(即www.my.com),但域的允许列表(即www.test.com、www.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-chrome internet-explorer iframe content-security-policy websecurity