我正在为X-Frame-Options
实现一个“传递”,让合作伙伴站点将我雇主的站点 Package 在iframe中,如本文所述:http://blogs.msdn.com/b/ieinternals/archive/2010/03/30/combating-clickjacking-with-x-frame-options.aspx
(将URL拆分后发布)
简而言之,我们的合作伙伴的页面有一个iframe,它的URL指向我们的域。对于我们域中的任何页面,他们都会添加一个特殊的url参数,比如&@mykey=topleveldomain.com
,告诉我们该页面的顶级域是什么。
我们的过滤器从URL中获取合作伙伴TLD(如果提供),并根据白名单进行验证。如果它在白名单上,我们将发送值为ALLOW-FROM topleveldomain.com
的X-Frame-Options
标头(并添加cookie以供将来点击)。如果它不在白名单上,我们将发送SAMEORIGIN
或DENY
。
问题是,发送ALLOW-FROM domain
似乎会导致最新的Firefox和Google Chrome整体上没有运行。至少IE8似乎正确地实现了ALLOW-FROM
。
查看此页面:http://www.enhanceie.com/test/clickjack。就在“应该显示内容”的第5个框后面,是一个不应该显示内容的框,但它确实显示了内容。在本例中,iframe中的页面正在发送X-Frame-Options: ALLOW-FROM http://www.debugtheweb.com
,这是一个与http://www.enhanceie.com
截然不同的TLD。然而,框架仍然显示内容。
关于X-Frame-Options
是否真的在相关的(桌面)浏览器上用ALLOW-FROM
实现了呢?也许语法已经改变了?
一些相关链接:
- X框架选项的RFC草案:https://datatracker.ietf.org/doc/html/draft-gondrom-frame-options-01
- developer.mozilla文章讨论了作为2选项头文件的头文件(sameorigin或deny)。https://developer.mozilla.org/en-US/docs/Web/HTTP/X-Frame-Options
- msdn博客发起了整个事情:http://blogs.msdn.com/b/ie/archive/2009/01/27/ie8-security-part-vii-clickjacking-defenses.aspx
- msdn博客,讨论3个价值观:添加允许值-从原点http://blogs.msdn.com/b/ieinternals/archive/2010/03/30/combating-clickjacking-with-x-frame-options.aspx
3条答案
按热度按时间0x6upsns1#
Chrome或Safari不支持ALLOW-FROM。请参阅MDN文章:https://developer.mozilla.org/en-US/docs/Web/HTTP/X-Frame-Options
你已经在做一个自定义的头文件并发送正确的数据,当你检测到它来自一个有效的合作伙伴时,你不能只排除头文件,并将DENY添加到每个其他的请求中吗?当你已经在动态地构建逻辑时,我看不到AllowFrom的好处?
yk9xbfzb2#
我发布了这个问题,从来没有看到反馈(几个月后才来的,看起来:)。
与Kinlan mentioned一样,并非所有浏览器都支持
ALLOW-FROM
作为X-Frame-Options
值。解决方案是根据浏览器类型进行分支。对于IE,运送
X-Frame-Options
。对于其他所有人,运送X-Content-Security-Policy
。希望这能有所帮助,很抱歉花了这么长时间才结束这个循环!
iyr7buue3#
对于Chrome,而不是
你需要添加
Content-Security-Policy
到HTTP响应头。
注意,这假设您在服务器上检查了是否允许refAuth。
此外,请注意,您需要进行浏览器检测,以避免添加Chrome的
allow-from
标头(在控制台上输出错误)。详情请看我在这里的回答。