我正在开发一个 iframe,用于我们的许多合作伙伴网站。
有什么办法可以确保它只能在这些网站上使用,而不能被其他任何人使用
我打算在网站的 URL 中添加一个强制查询字符串。每个合作伙伴在 quesrystring 中都有不同的值,dnd 使用它来查找允许的域
但是,有没有办法知道托管 iframe 的站点的顶级域?
大概这不是在 iFrame 的 http 请求中发送的?还是,我看不到?
还是您需要从 javascript 发送域?
有什么建议吗?
我正在开发一个 iframe,用于我们的许多合作伙伴网站。
有什么办法可以确保它只能在这些网站上使用,而不能被其他任何人使用
我打算在网站的 URL 中添加一个强制查询字符串。每个合作伙伴在 quesrystring 中都有不同的值,dnd 使用它来查找允许的域
但是,有没有办法知道托管 iframe 的站点的顶级域?
大概这不是在 iFrame 的 http 请求中发送的?还是,我看不到?
还是您需要从 javascript 发送域?
有什么建议吗?
但是,有没有办法知道托管 iframe 的站点的顶级域?
没有什么可靠的。
大概这不是在 iFrame 的 http 请求中发送的?还是,我看不到?
它可能会在referer中发送
还是您需要从 javascript 发送域?
如果您想从框架页面中获取它,您将被同源策略阻止。
如果您想从框架页面发送它,您将把它放在查询字符串中并且您不能信任它,因为它可以设置为编写框架页面的人喜欢的任何内容。
还有X-Frame-Options 标头(但浏览器支持有限)。
我能想到的最可靠的解决方案是:
target="_top"
和一些 JavaScripttop.location = "your site"
X-Frame-Options
将框架限制到指定原点的标题这可能会捕获足够多的浏览器来阻止框架站点构建您的站点。
您可以尝试检查普通浏览器将为页面上的 IFrame 请求发送的引荐来源网址。
您也可以使用(如何阻止 Iframe 调用和MDN )中介绍的“x-frame-options”标头,但并非每个浏览器都会尊重这一点(另一方面,如果浏览器支持它会更可靠)。
iframe 的 sanbox 属性可能有助于控制 iframe 中的各种安全方面,包括来源
http://www.html5rocks.com/en/tutorials/security/sandboxed-iframes/
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 完成,因此应该使用服务器端代码完成。