检查iFrame是否由允许的域托管

时间:2013-01-30 17:33:55

标签: c# javascript html http

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

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

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

但是,有没有想知道托管iframe的网站的顶级域名?

据推测,这不是在iFrame的http请求中发送的?或者是它,我看不到它?

或者您是否需要从javascript发送域名?

有什么建议吗?

4 个答案:

答案 0 :(得分:5)

  

但是,有没有想知道托管iframe的网站的顶级域名?

没什么可靠的。

  

据推测,这不是在iFrame的http请求中发送的?或者是它,我看不到它?

可能在referer中发送

  

或者您是否需要从javascript发送域名?

如果您想从框架页面获取它,您将被相同的原始政策阻止。

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

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

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

  1. 要求在用于加载框架的查询字符串中指定原点
  2. 检查引用者。如果它与您的白名单不匹配且不是空白,请重定向到空白页面,但使用target="_top"指向您网站的链接除外{{1} }
  3. 检查查询字符串中指定的来源是否在白名单中,如果它的行为方式与被拒绝的步骤2相同
  4. 输出top.location = "your site"标题,将标题限制为指定的来源
  5. 这可能会吸引足够的浏览器来阻止框架网站构建您的网站。

答案 1 :(得分:1)

您可以尝试检查引荐来自哪个普通浏览器将在页面上发送IFrame请求。

你也可以使用(How to Block Iframe callMDN中所涵盖的“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将允许您跨域传递信息 enter image description here

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

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