识别 Rails 中对 iframe 不友好的站点——即使标题中缺少 x-frame-options

Posted

技术标签:

【中文标题】识别 Rails 中对 iframe 不友好的站点——即使标题中缺少 x-frame-options【英文标题】:Identifying iframe-unfriendly sites in rails — even when x-frame-options is missing from header 【发布时间】:2016-05-04 19:42:40 【问题描述】:

背景:

我正在开发一个 Rails 应用程序,它将通过 iframe(在我的应用程序顶部有一个导航栏,有点像 StumbleUpon)在应用程序本身内打开文章。但我注意到一些发布文章的网站(例如:pitchfork.com、vox.com、theverge.com)通过将 X-Frame-Options 设置为 SAMEORIGIN 或 DENY 来阻止自己被加载到 iframe 中。

我目前解决此问题的计划是查看链接的标题并检查它是否包含 X-Frame-Options。如果是这样,我会将其设置为放弃 iframe,并在新标签页中打开原始网站。

此方法似乎适用于某些网站(如 pitchfork.com),因为当我从 pitchfork.com 请求标头时,我得到以下信息:

server: nginx/1.4.6 (Ubuntu)
content-type: text/html; charset=utf-8
x-frame-options: SAMEORIGIN
date: Wed, 27 Jan 2016 17:47:54 GMT
x-varnish: 912263733 912263044
age: 8
via: 1.1 varnish
connection: keep-alive

问题:

对于某些网站(例如 vox.com),当我将它们加载到 iframe 中时,the chrome developer console tells me x-frame-options 会阻止网站加载到 iframe 中。但是当我检查标题时,x-frame-options 无处可寻!我得到的只是这个:

server: nginx/1.6.2
date: Wed, 27 Jan 2016 17:26:15 GMT
content-type: text/html
content-length: 172
connection: close

vox.com 是如何做到这一点的?为了进一步澄清,我尝试使用我在另一个 *** 帖子中找到的this tool,它也未能正确检测到 vox.com 通过 x-frame-options 阻止 iframe。

1) Vox 是否能够在标题以外的地方设置 x-frame-options?如果是后者,我该如何检测和发现?

2) 您推荐任何其他替代策略来检测对 iframe 不友好的网站,以便我可以将它们设置为在新标签页中打开?

【问题讨论】:

【参考方案1】:

查看 Chrome 控制台中记录的网络流量。在您的应用中,您正在查看 HTTP 301 Moved Permanently 响应的标头,然后它会将您重定向到确实返回 X-Frame-Options: SAMEORIGIN 标头的位置。

其他网站可能会使用其他方法(例如较新的 Content-Security-Policy header 或 javascript 代码)来防止 iframe 嵌入。但在 vox.com 的情况下,您只是在查看错误响应的标头。

【讨论】:

太好了,查看 Chrome 控制台的网络流量部分,显示带有 X-Frame-Options 的标头。我想我现在的问题是 Rails 在请求网站的标头时无法检测到这一点 - 不确定发生了什么重定向,因为即使我请求主页的标头也会发生这种情况:www.vox.com 因为这是现在更多的是rails问题,我将提出一个新问题。谢谢!

以上是关于识别 Rails 中对 iframe 不友好的站点——即使标题中缺少 x-frame-options的主要内容,如果未能解决你的问题,请参考以下文章

为啥前端尽量少用iframe

在没有在模型中定义的情况下在 rails 中创建 slug

Rails 4中友好id gem的随机slug url

如何在 Rails3 中对关联关系使用 unscoped?

在 Rails 中对 Globalize3 表进行简单搜索

Rails 6 - 将 URL 中 root_path 的参数更改为 SEO 友好的 URL