识别rails中不依赖iframe的站点 - 即使标题

时间:2016-01-27 17:42:44

标签: iframe x-frame-options

背景

我正在使用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如何做到这一点?为了进一步澄清,我尝试使用我在另一个stackoverflow帖子中找到的this tool,但它也无法正确检测到vox.com通过x-frame-options阻止了iframe。

1)Vox是否能够在标题之外的某处设置x-frame-options?如果是后者,我该如何检测并找到它?

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

1 个答案:

答案 0 :(得分:1)

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

其他网站可能会使用其他方法(例如较新的Content-Security-Policy header或JavaScript代码)来阻止iframe嵌入。但就vox.com而言,您只是简单地查看错误响应的标题。