【问题标题】:Accessing parent page with javascript inside an iframe在 iframe 中使用 javascript 访问父页面
【发布时间】:2011-04-05 20:01:04
【问题描述】:

有没有办法“突破” iframe?我的意思是人们会将我的 javascript 标签放在 iframe 中(有时它最终会成为嵌套的 iframe,但现在让我们只处理 ONE)。我正在尝试收集某些信息,例如 iframe 在页面上的位置。当您不在具有 offsetLeft/offsetTop/innerHeight/innerWidth 混合的 iframe 中时,这样做很容易,但我知道您不能(或不应该能够)看到 iframe 之外的任何内容你的 in(假设不同的域,它将是)。

有人对此有什么建议吗?或者至少我可以研究更多的任何资源?虽然我最终希望能够使用 iframe 中的 JS 访问原始页面的 DOM,但我知道这实际上是不可能的。现在我很乐意找出 iframe 在页面上的位置。我不确定该信息是否是 DOM 或浏览器属性的一部分(我相信您仍然可以访问?)

谢谢!

【问题讨论】:

  • 如果您想要某些信息(例如位置),那么您可以要求将内容返回给您的客户。只需向他们提供如何调用您的内容的示例(提供辅助 JS 等)。您的页面可以使用该信息或将错误内容返回给调用者。
  • 是的,不幸的是,有时我的标签会在多人之间传递,添加到其他系统并在另一边吐出等。所以我无法执行规则。你能访问你最终到达的页面的 URL 吗?即使您嵌套在一个或多个 iframe 中?还是这仍然违反安全政策...

标签: javascript security jsp iframe cross-domain


【解决方案1】:

简短的回答是否定的。

更长的答案是,使用 CORS 和跨框架/域消息传递,您现在比以前做得更好。但是如果你尝试从另一个域访问父框架中的 DOM,你会得到一个胖的“访问被拒绝”。

如果您将一些 javascript 放在可以加载诸如在您的服务器上设置 cookie 的图像之类的东西的父级中,那么可以。但我想这不是你的意思

这是一个关于如何获取来源的示例 - 让 iframe 的用户像这样加载它:

    <script type="text/javascript">
    document.write('<script src="yourIframeLoader.php?parent='+escape(location.href)+'"><\/script>');
    </script>

【讨论】:

  • 是的,这就是我害怕的。我现在将更多地研究跨框架/域消息传递,看看它是否可能对我有帮助,但我对此表示怀疑。我遇到的最大问题是我完全无法控制最终进入的页面。所以会有不同的域,我不能添加任何额外的 JS 来加载图像/cookie,什么都没有。你至少能看到你最终在哪个域上吗?如果您在一个或多个 iframe 中,您能否访问/查看您最终在哪个页面上?
  • 如果父域所有者没有向他的页面添加额外的脚本,那么这些天你完全不走运 AFAIK。如果您可以让该人添加一些 sn-ps,那么您可以做一些事情。有关示例,请参阅我的答案
【解决方案2】:

这不适用于跨域。阻止 javascript 在域之间工作是一项主要的安全功能(称为同源策略)。

想象你从某个邪恶的网站开始:www.evil.com。从那里,不知何故,他们诱骗您单击您希望将您带到敏感站点(贝宝、您的银行等)的链接。但是,他们实际上并没有将您发送到该站点,而是实际上将其 iFrame 输入。您继续登录。BAM。

如果他们的脚本可以访问跨域 iFrame 的 DOM,他们就可以轻松获取您通过登录表单传递的任何数据。恶心,嗯?没有办法安全地处理这个问题,所以它被关闭了(可以说是 JSONP 除外)

【讨论】:

    【解决方案3】:

    您始终可以在父页面上实现一些 javascript 函数,并通过调用 parent.Myfunction(); 从 iframe 中调用它们

    至于确定 iframe 的位置,我不确定。

    【讨论】:

      【解决方案4】:

      虽然 iFrame 不能直接更改其父级,但父级可以从 iFrame 读取数据。

      这意味着父 HTML 页面可以使用 JS 来查看子 iFrame 中的数据。

      如果您同时控制父级和 iFrame 内容,那么您可以通过 iFrame 中约定的元素 id 设置从 iFrame 到父级的消息传递。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-18
        • 2011-08-09
        • 1970-01-01
        • 1970-01-01
        • 2011-07-08
        • 1970-01-01
        • 2012-05-31
        • 1970-01-01
        相关资源
        最近更新 更多