3

我正在开发一个 iframe,用于我们的许多合作伙伴网站。

有什么办法可以确保它只能在这些网站上使用,而不能被其他任何人使用

我打算在网站的 URL 中添加一个强制查询字符串。每个合作伙伴在 quesrystring 中都有不同的值,dnd 使用它来查找允许的域

但是,有没有办法知道托管 iframe 的站点的顶级域?

大概这不是在 iFrame 的 http 请求中发送的?还是,我看不到?

还是您需要从 javascript 发送域?

有什么建议吗?

4

4 回答 4

6

但是,有没有办法知道托管 iframe 的站点的顶级域?

没有什么可靠的。

大概这不是在 iFrame 的 http 请求中发送的?还是,我看不到?

可能会在referer中发送

还是您需要从 javascript 发送域?

如果您想从框架页面中获取它,您将被同源策略阻止。

如果您想从框架页面发送它,您将把它放在查询字符串中并且您不能信任它,因为它可以设置为编写框架页面的人喜欢的任何内容。

还有X-Frame-Options 标头(但浏览器支持有限)。

我能想到的最可靠的解决方案是:

  1. 要求在用于加载框架的查询字符串中指定原点
  2. 检查推荐人。如果它与您的白名单不匹配并且不为空白,则重定向到空白页面,除了指向您网站的链接target="_top"和一些 JavaScripttop.location = "your site"
  3. 检查查询字符串中指定的来源是否在您的白名单中,如果它的行为方式与被拒绝的步骤 2 不同
  4. 输出X-Frame-Options将框架限制到指定原点的标题

这可能会捕获足够多的浏览器来阻止框架站点构建您的站点。

于 2013-01-30T17:44:10.783 回答
1

您可以尝试检查普通浏览器将为页面上的 IFrame 请求发送的引荐来源网址。

您也可以使用(如何阻止 Iframe 调用MDN )中介绍的“x-frame-options”标头,但并非每个浏览器都会尊重这一点(另一方面,如果浏览器支持它会更可靠)。

于 2013-01-30T17:38:23.073 回答
0

iframe 的 sanbox 属性可能有助于控制 iframe 中的各种安全方面,包括来源
http://www.html5rocks.com/en/tutorials/security/sandboxed-iframes/

于 2013-01-30T17:47:39.160 回答
0

2007 年的 Architecture Journal 有一篇很好的文章:Secure Cross-Domain Communication in the Browser

基本上这篇文章的建议是:如果您在域 1 上的页面 A 与域 2 上的页面 B 作为其源的 iframe,那么在页面 B 上的 iframe 到域 1 上的页面 C 将允许您跨域传递信息 在此处输入图像描述

我还没有测试过,但这听起来它可以工作。

另一种可能性是创建一个具有特殊文件名(例如域 2 上页面 B 的 URL 的哈希)和基本扩展名(如 .htm)的文件,并将其放在域 1 的根目录中。检查该文件是否存在于域中然而,1 无法通过 javascript 完成,因此应该使用服务器端代码完成。

于 2014-01-16T13:19:00.257 回答