识别 rails 中的 iframe-unfriendly 个站点 — 即使 header 中缺少 x-frame-options
Identifying iframe-unfriendly sites in rails — even when x-frame-options is missing from header
背景:
我正在开发一个 rails 应用程序,它将通过 iframe 在应用程序内部打开文章(我的应用程序顶部有一个导航栏,有点像 StumbleUpon)。但我注意到一些发布文章的网站(例如:pitchfork.com、vox.com、theverge.com)通过将 X-Frame-Options 设置为 SAMEORIGIN 或 DENY 来防止自己被加载到 iframe 中.
我目前的解决方案是查看 header 中的 link 并检查它是否包含 X-Frame-Options。如果是这样,我会将其设置为放弃 iframe 并在新选项卡中打开原始站点。
此方法似乎适用于某些网站(如 pitchfork.com),因为当我从 pitchfork.com 请求 header 时,我得到以下信息:
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 中。但是当我检查 header 时,找不到 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 是怎么做到的?为了进一步说明,我尝试使用在另一个 Whosebug post 中找到的 this tool,它也未能正确检测到 vox.com 通过 x-frame-options.[=18= 阻止了 iframe ]
1) Vox 是否可以在 header 以外的地方设置 x-frame-options?如果是后者,我如何检测并找到它?
2) 您推荐用于检测 iframe-unfriendly 网站的任何其他替代策略,以便我可以将它们设置为在新选项卡中打开?
查看Chrome控制台中记录的网络流量。在您的应用程序中,您正在查看 HTTP 301 Moved Permanently
响应的 headers,然后将您重定向到执行 return X-Frame-Options: SAMEORIGIN
[=19= 的位置].
其他网站可能会使用其他方法,例如较新的 Content-Security-Policy header 或 JavaScript 代码来阻止 iframe 嵌入。但在 vox.com 的情况下,您只是在查看错误响应的 header。
背景:
我正在开发一个 rails 应用程序,它将通过 iframe 在应用程序内部打开文章(我的应用程序顶部有一个导航栏,有点像 StumbleUpon)。但我注意到一些发布文章的网站(例如:pitchfork.com、vox.com、theverge.com)通过将 X-Frame-Options 设置为 SAMEORIGIN 或 DENY 来防止自己被加载到 iframe 中.
我目前的解决方案是查看 header 中的 link 并检查它是否包含 X-Frame-Options。如果是这样,我会将其设置为放弃 iframe 并在新选项卡中打开原始站点。
此方法似乎适用于某些网站(如 pitchfork.com),因为当我从 pitchfork.com 请求 header 时,我得到以下信息:
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 中。但是当我检查 header 时,找不到 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 是怎么做到的?为了进一步说明,我尝试使用在另一个 Whosebug post 中找到的 this tool,它也未能正确检测到 vox.com 通过 x-frame-options.[=18= 阻止了 iframe ]
1) Vox 是否可以在 header 以外的地方设置 x-frame-options?如果是后者,我如何检测并找到它?
2) 您推荐用于检测 iframe-unfriendly 网站的任何其他替代策略,以便我可以将它们设置为在新选项卡中打开?
查看Chrome控制台中记录的网络流量。在您的应用程序中,您正在查看 HTTP 301 Moved Permanently
响应的 headers,然后将您重定向到执行 return X-Frame-Options: SAMEORIGIN
[=19= 的位置].
其他网站可能会使用其他方法,例如较新的 Content-Security-Policy header 或 JavaScript 代码来阻止 iframe 嵌入。但在 vox.com 的情况下,您只是在查看错误响应的 header。