我正在开发一个iframe,用于我们的许多合作伙伴网站。
有什么方法可以确保它只能在这些网站上使用,而不是由其他任何人使用
我打算在网站的网址上添加强制查询字符串。 每个合作伙伴在quesrystring dnd中使用不同的值来查找允许的域
但是,有没有想知道托管iframe的网站的顶级域名?
据推测,这不是在iFrame的http请求中发送的?或者是它,我看不到它?
或者您是否需要从javascript发送域名?
有什么建议吗?
答案 0 :(得分:5)
但是,有没有想知道托管iframe的网站的顶级域名?
没什么可靠的。
据推测,这不是在iFrame的http请求中发送的?或者是它,我看不到它?
可能在referer中发送
或者您是否需要从javascript发送域名?
如果您想从框架页面获取它,您将被相同的原始政策阻止。
如果你想从框架页面发送它,你将它放在查询字符串中,你不能相信它,因为它可以设置为编写框架页面的人喜欢的任何内容。
还有the X-Frame-Options header(但浏览器支持有限)。
我能想到的最可靠的解决方案是:
target="_top"
指向您网站的链接除外{{1} } top.location = "your site"
标题,将标题限制为指定的来源这可能会吸引足够的浏览器来阻止框架网站构建您的网站。
答案 1 :(得分:1)
您可以尝试检查引荐来自哪个普通浏览器将在页面上发送IFrame请求。
你也可以使用(How to Block Iframe call和MDN中所涵盖的“x-frame-options”标题,但不是每个浏览器都会尊重它(另一方面它更可靠如果< / em>浏览器支持它。)
答案 2 :(得分:0)
iframe的sanbox属性可能有助于控制包含来源的iframe中的各种安全方面 http://www.html5rocks.com/en/tutorials/security/sandboxed-iframes/
答案 3 :(得分:0)
The Architecture Journal of 2007有一篇很好的文章:Secure Cross-Domain Communication in the Browser
基本上文章建议的是: 如果域1上的页面A具有以域2上的页面B作为其来源的iframe,那么在页面B上具有iframe到域1上的页面C将允许您跨域传递信息
我还没有测试过,但听起来它可以起作用。
另一种可能性是创建一个具有特殊文件名的文件(例如域2上页面B的URL的哈希值)和基本扩展名(如.htm)并将其放在域1的根目录中。检查文件是否存在域1上存在不能通过javascript完成,因此应该使用服务器端代码完成。