问题 如何在Rails 4控制器中“允许”多个域中的“X-Frame-Options”?


在我正在开发的Ruby on Rails 4应用程序中,我需要创建一个页面,将其拉入到托管在iframe上的iframe中 foo.bar.com 服务器,所以我有这个控制器方法:

def iframed_page
  response.headers["X-FRAME-OPTIONS"] = "ALLOW-FROM http://foo.bar.com"
end

..现在事实证明,客户希望我也白名单 http://foo.dev.bar.com 同样。

我知道,对于设置X-FRAME-OPTIONS,“ALLOW-FROM”选项不允许多个子域。但由于这是具有不同子域的相同根域,它会更灵活吗?例如,我可以做类似的事情

response.headers["X-FRAME-OPTIONS"] = "ALLOW-FROM http://*.bar.com"

还有?


8554
2017-11-04 21:57


起源

可能重复 X-Frame-Options允许来自多个域 - deefour
我读了那个问题,非常感谢你。它没有解释任何关于Ruby on Rails的内容,也没有解释如果你有两个不同的根域域的子域,该怎么办。 - drumwolf
当我说:我的问题不是特定于Rails时,我不是在争论,并且上面链接的问题/答案确实提供了使用通配符前缀的信息 Content-Security-Policy。无论如何,似乎 X-FRAME-OPTIONS 可能不是最具前瞻性的选择。 - deefour
上面提到的问题清楚地表明了这一点 Content-Security-Policy 不适用于所有浏览器和相关指令 frame-ancestors 仅适用于Chrome和Firefox。也就是答案的陈述 X-FRAME-OPTIONS 也过时了。 - fzzfzzfzz


答案:


你可以使用 Content-Security-Policy 相反,但它 对一切都不起作用

response.headers["X-Content-Security-Policy"] = "frame-ancestors http://*.bar.com";
response.headers["Content-Security-Policy"] = "frame-ancestors http://*.bar.com";
  • Content-Security-Policy 将覆盖 X-Frame-Options 在现代浏览器上
  • X-Content-Security-Policy 将覆盖 X-Frame-Options 在IE11上

11
2018-05-17 18:06



frame-ancestors 是CSP第2版的一部分,它是 目前不支持 在Internet Explorer或Edge中。 - Sjoerd
请注意,frame-ancestors不会在firefox中占优先权,请看这个bug bugzilla.mozilla.org/show_bug.cgi?id=1024557 并尝试将其修复。 - MicWit
每 developer.mozilla.org/en-US/docs/Web/HTTP/CSP: “有时您会看到X-Content-Security-Policy标题的提及,但这是旧版本,您不再需要再指定它” - Madbreaks
不适用于最新的Safari - cosbor11