【问题标题】:get the parent url of iframe in PHP在 PHP 中获取 iframe 的父 url
【发布时间】:2011-04-13 02:29:10
【问题描述】:

我正在创建一个将加载到 IFrame 中的小部件,用户将能够将该小部件放置在他们自己的网站上。如何获取在 javascript 和/或 PHP 中使用 IFrame 的网站的 URL? IFrame 加载一个 php 文件。

我在 IFrame 页面中尝试过“parent.top.location.href”和“parent.document.referrer”,但未定义。

我还尝试在 IFrame 页面中回显“$_Server[referrer]”,并且确实返回了 IFrame 父 URL,但是对于某人来说,操纵引用者变量有多容易?我不想得到误导性信息。 目标:我创建了一个小部件,并希望允许注册用户在他们的网站上使用该小部件。我希望能够找出谁在使用小部件,如果未注册用户在他们的网站上使用它,那么小部件将不会显示

【问题讨论】:

    标签: javascript php url iframe parent


    【解决方案1】:

    尝试:

    parent.location.href;
    

    parent.document.URL
    

    【讨论】:

    【解决方案2】:

    我也尝试过回声 IFrame 中的“$_Server[referrer]” 页面并且确实返回了 IFrame 父 URL,但它有多容易 有人操纵推荐人 变量?

    很简单,但禁用 JavaScript 也是如此!但是,如果一个网站使用您的<iframe>,他们将很难在他们的访问者的 UA 中伪造引荐来源网址。 (如果他们真的坚持隐瞒他们正在使用您的内容的事实,他们也可以代理您的内容。在这种情况下,您唯一的选择就是一开始就不发布它。)

    为了仅向“合作伙伴”展示内容,您可以考虑向他们提供令牌(如 Twitter/Google/... API)。如果未使用(或无效)令牌,则显示错误。如果使用了有效令牌但引荐来源网址可疑,则应进一步调查。

    【讨论】:

    • "...你应该进一步调查。" - 如果他们仍然不合作,则撤销令牌:)
    【解决方案3】:

    iframe-d 页面中的一小段 JavaScript 可以“取消框架”页面:

    if (top != self) {top.location.replace(self.location.href);}
    

    否则,正如@mck89所说:iframe可以使用top.location.href访问父页面的URL。

    进一步阅读问题How to prevent my site page to be loaded via 3rd party site frame of iframe

    【讨论】:

      【解决方案4】:

      您可以使用以下 PHP 代码让父窗口 URL 获取数组中的值:

        <?php
             //Getting the parent window parameters
              $getURLVar = str_replace("?","",strrchr($_SERVER['HTTP_REFERER'],"?"));
              $getURLVar = str_replace("&","=",$getURLVar);
              $getURLVar = str_getcsv($getURLVar,"=");
              $i=0;
              foreach ($getURLVar as $value)
                {
                  if ($i % 2)
                      $value1[$i]=$value;
                  else
                      $value2[$i]=$value;
      
                  $i++;
                } 
              $getURLVar =array_combine($value2,$value1);
      
      
              print_r($getURLVar);
          ?>
      

      【讨论】:

        【解决方案5】:

        假设您的小部件的 URL 不做任何重定向等,您应该可以使用:

        document.referrer
        

        来自 iframe 内的 javascript,它应该包含父页面的 URL。这似乎是 YouTube 在其 iframe 嵌入代码中跟踪所做的。

        【讨论】:

          【解决方案6】:

          我会使用:

          $qStr = explode('?', $_SERVER['HTTP_REFERER']);        
          $t= explode('&', $qStr[1]);
          foreach ($t as $val)
          {
              $a = explode('=', $val);
              $args[$a[0]]=$a[1];
          }
          // to check the arguments
          print_r($args);
          // to check the url
          echo $qStr[0];
          

          $args 将包含我的安全令牌,该令牌将通过针对 url 的一些散列进行检查

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-03-30
            • 2016-09-15
            • 1970-01-01
            • 2011-04-08
            • 2013-04-27
            • 1970-01-01
            相关资源
            最近更新 更多