解决相同的原产地政策问题

时间:2009-07-15 12:49:23

标签: html security same-origin-policy

我有一个问题,我有一个框架集,包含从一个域加载的父框架和来自不同域的包含框架。包含的域还在加载框架集之前设置cookie。但是,由于大多数浏览器强制实施的“相同orgin”策略,如果包含的框架不是来自与父母相同的域,则不会传递Cookie。

不幸的是,我无法控制父框架(或其网址),并且所包含框架的网址实际上是静态的。因此,将信息传递到包含网站的唯一方法是通过cookie。

我提出的唯一解决方案是在父框架中重新加载包含的域,但这首先否定了使用框架的一些价值。

有没有人能更好地解决这个问题?

4 个答案:

答案 0 :(得分:2)

有两种方法绕过Same Origin Policy,阻止你的iframe互相交谈。如果您控制两台服务器,则可以使用Flash's crossdomain.xml file。如果您不控制其中一个服务器或者您想使用JavaScript,那么您将被迫使用“跨域代理”,例如javapython或{ {3}}

php是另一种选择,但并非所有浏览器都支持它。

答案 1 :(得分:1)

有很多方法可以做到这一点。这是我用过的两个:

  1. 同时加载父级和子级 来自共同来源的脚本,使用 一个标签。加载的脚本 这种方式没有同源 问题,以及他们返回的数据 成为文档对象的一部分 并可以与其他脚本交互 由文件加载(这是 AJAST的工作方式)。
  2. 在父域中创建反向代理,并通过此代理加载帧。对于浏览器,它们似乎都来自同一个域。缺点是这会影响缓存,并绕过您可能正在使用的任何内容交付网络(例如,Akamai)。

答案 2 :(得分:1)

在使用postMessage的HTML 5中,还有一种正确的方法。 见这里:http://ajaxian.com/archives/cross-window-messaging-with-html-5-postmessage

答案 3 :(得分:1)

还有一个想法,你可以使用跨域消息传递API将消息从一个帧发送到另一个帧。这是一个example!详细了解this