【问题标题】:Checking iframe is called from the approved domain? [duplicate]检查 iframe 是从批准的域调用的吗? [复制]
【发布时间】:2012-05-18 15:39:19
【问题描述】:

可能重复:
How to limit display of iframe from an external site to specific domains only

我想要的很简单。我想防止我的网站被我不批准的域调用。 假设只有 a.com 和 b.com 可以有一个带有 iframe 的页面,该页面调用我的 web 应用程序 wwww.mydomain.com/myapp.php。我怎样才能做到这一点?

第一,我正在考虑我的网络应用程序检查 iframe 父级的域。也许这是可能的,但肯定不容易,因为跨域限制。

第二,我正在考虑让 a.com 和 b.com 上的请求页面首先执行一个小的 PHP 脚本,该脚本将一些信息写入文件或我的数据库,所以我知道请求页面在一个已批准的页面上域。问题是如何调用以及何时执行脚本?

放置带有 src 属性的脚本标签或图像标签是个好主意吗?这对我来说似乎是一个相当简单的解决方案,不需要 PHP。请求页面可以是纯 HTML。

应该是这样的:

<img src="http://wwww.mydomain.com/myapp.php" style="width: 0px; height: 0px;" alt="Not an image"  title="Not an image"/>

你有什么建议?

【问题讨论】:

    标签: html iframe execute


    【解决方案1】:

    我就是这样做的,它就像一个魅力。一般用户将无法访问我的网络应用程序。

    无需对已批准的域进行任何操作。甜的!

    感谢 dda 和 jackJoe (How to limit display of iframe from an external site to specific domains only)

    <?php
    
      define('MSG_NO_ACCESS', 'No access');
    
      $acceptedDomains = array('mydomain.com', 'a.com', 'b.com');
      $referer=get_domain($_SERVER['HTTP_REFERER']);
    
      if(!$referer || !in_array($referer,$acceptedDomains))
      {
         header('HTTP/1.0 403 Forbidden');
         exit(MSG_NO_ACCESS);
      }
    
    function get_domain($url)
    {
      $pieces = parse_url($url);
      $domain = isset($pieces['host']) ? $pieces['host'] : '';
      if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $regs)) 
      {
         return $regs['domain'];
      }
      return false;
    }
    

    ?>

    【讨论】:

    • 如果他们欺骗referrer怎么办?
    • 简单而有效。谢谢。
    【解决方案2】:

    这个问题已经被问过了。 How to limit display of iframe from an external site to specific domains only

    基本上你可以,根据你的网络服务器,你需要限制访问。

    使用 Apache,这可以在 .htaccess 文件中完成

    使用 IIS,这可以在“IP 地址和域限制”中完成

    如果您在某个共享托管平台上,您可能没有那么多控制权。

    【讨论】:

    • 我的错。在我问我的问题之前,我应该先搜索一下。但是你的回答很有帮助。谢谢。
    【解决方案3】:

    一点 PHP 注入一些 JS 可以大有帮助。

    <?php
    if(array_key_exists('HTTP_REFERER',$_SERVER)){
      $referer=$_SERVER['HTTP_REFERER'];
    } else {
      $referer='';
    }
    echo "<script type='text/javascript'>
    var referer='".$referer."';
    </script>
    ";
    ?>
    

    这会将 HTTP_REFERER 注入到“referer”JS 变量中。现在有了它和下面的 JS 代码,你就可以开始了:

    if (top === self) {
    // not in a frame, no worries
    } else {
    // in a frame, decide whether referer is one of the guys allowed to display your web site...
    // nuke the content, redirect, display a goatsee pic, etc
    }
    

    【讨论】:

      【解决方案4】:

      您无法阻止这种情况发生。任何拥有服务器代理的人都可以获取您的 HTML 并将其重新作为自己的。

      规则 #1:如果您不希望人们在互联网上窃取您的东西,请不要将其放到网上。

      【讨论】:

      • 我相信你是对的。也许我应该说“防止普通用户”简单地在 iframe 中调用我的网站。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-14
      • 1970-01-01
      • 1970-01-01
      • 2012-08-06
      • 1970-01-01
      • 2013-01-18
      • 2021-12-27
      相关资源
      最近更新 更多