【问题标题】:javascript - bypassing iframe cross domain securityjavascript - 绕过 iframe 跨域安全性
【发布时间】:2013-08-12 15:33:36
【问题描述】:

我正在尝试使用 iframe 和 javascript 解决跨域安全问题。

我们有几个发布者网站,它们的网站上直接嵌入了我们的简单 javascript 文件(通过 Amazon CloudFront 提供服务)。该脚本在发布商网站上执行一些操作(修改 DOM)以显示静态广告,我们针对每个发布商网站定位不同。

当我们通过 iframe (Google DFP) 提供相同的脚本时,由于 iframe 网址和发布商网站网址不相关,因此由于跨域安全性,它显然不起作用。

现在我们使用另一个广告服务器,以解决每个发布者托管的 HTML 文件(因此每个发布者的相对路径类似于 /iframe-buster.html),其中包含一些允许广告展开的 javascript在 iframe 之外。我不明白我的想法到底是什么:

  1. 通过 iframe 投放的广告会创建一个子框架,其中包含指向 iframe buster 的 URL 路径
  2. 新的 iframe 网址包含查询字符串变量(例如广告标识符)
  3. 然后 iframe JS 可以通过调用 parent.parent 或 top 来修改文档 DOM。?

我不知道这是否可行,有人知道或尝试过这样的事情吗?

【问题讨论】:

    标签: javascript iframe


    【解决方案1】:

    发布商网站上托管的脚本不需要(实际上不应该)破坏 iframe。相反,此脚本的目的是在 AD iframe(托管在 DFP 内)和发布商页面之间建立通信渠道。

    这里的问题是 - 在运行时,发布页面上的脚本知道什么是 DFP iframe url 域,但由于跨域访问限制,通过云端提供的脚本不知道什么是发布者页面 url。

    因此发布者脚本可以设置一个 postMessage 处理程序来接收来自广告 Iframe 的消息。它可以做类似的事情

            function registerPostMessageHandler() {
                // Listen to message from child window
                var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
                var eventer = window[eventMethod];
                var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
    
                eventer(messageEvent,function(e) {
                    var key = e.message ? "message" : "data";
                    var data = e[key];
                    console.log("Message obtained from origin " + e.origin + ' data: ' + data);
    
                    //Insert an AD slot based on the message
                },false);
            }
    

    而AD iframe中的JS可以做到

    parent.postMessage(/*where to create the AD slot*/);
    

    注意:“通过 iframe 投放的广告会创建一个带有指向 iframe buster 的 URL 路径的子框架”——这是不可能的,因为 iframe 不知道发布商域,并且由于安全限制它可以'也不知道。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-05
      • 2013-09-08
      • 2010-10-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-28
      相关资源
      最近更新 更多