【问题标题】:How to prevent my site page to be loaded via 3rd party site frame of iFrame如何防止我的网站页面通过 iFrame 的第 3 方网站框架加载
【发布时间】:2011-02-23 04:59:45
【问题描述】:

如何在页面加载过程中发现我的页面作为框架嵌入到其他网站?我想推荐人请求标头在这里帮不了我?谢谢。

【问题讨论】:

  • 嗨,约翰,我不能说我需要完整的解决方案,只需移动方向就足够了,在我找到问题的答案后,我总是将其作为答案发布,这是只有这样我才能参与社区。​​span>
  • 注意:设置meta标签是没用的!例如, 没有效果。不要使用它!只有通过像下面的示例那样通过 HTTP 标头进行设置,X-Frame-Options 才会起作用。 developer.mozilla.org/fr/docs/Web/HTTP/Headers/X-Frame-Options

标签: php python iframe http-headers frame


【解决方案1】:

您无法从服务器端检查它,但您可以在页面加载后使用 javascript 检测它。比较topself,如果它们不相同,那么你就在一个框架中。

此外,一些现代浏览器尊重X-FRAME-OPTIONS 标头,它可以有两个值:

  • DENY - 如果页面包含在框架中,则阻止呈现页面
  • SAMEORIGIN – 与上述相同,除非页面与顶级框架集持有者属于同一域。

用户包括不能嵌入框架的 Google 的 Picasa。

支持标头的浏览器,最低版本:

  • IE8 和 IE9
  • Opera 10.50
  • Safari 4
  • Chrome 4.1.249.1042
  • Firefox 3.6.9(带有NoScript 的旧版本)

【讨论】:

【解决方案2】:

Stackoverflow 包含一些 JS 来测试它 (master.js)。这是它的相关部分:

if(top!=self){
    top.location.replace(document.location);
    alert("For security reasons, framing is not allowed; click OK to remove the frames.")
}

但请记住,可以禁用 JS。

【讨论】:

  • 如果您想向将您的内容放入 iframe 的人或正在查看 iframe 中您的内容的网站的最终用户收到消息,此方法特别有用。跨度>
【解决方案3】:

对于modern browsers,您可以使用标准的CSP(内容安全策略)。以下标头将阻止文档在任何地方加载到框架中:

Content-Security-Policy: frame-ancestors 'none'

(不过,IE 11 需要 X- 前缀)。您还可以将'none' 更改为允许框架的来源,例如您自己的网站。

为了覆盖旧版浏览器,最好与@Maerlyn's answer一起使用。

【讨论】:

  • 您的回答不够清楚,恕我直言。这是标头代码还是 PHP?例如。
  • @GaryCarlyleCook 这是一个 HTTP 标头,在提供页面时应该是对浏览器的响应的一部分。它不是 PHP 代码,尽管您可以使用 PHP 来发送它;见header()
【解决方案4】:

您可以使用 javascript 阻止在 iframe 中加载您的页面

<script type="text/javascript">
if ( window.self !== window.top ) {
    window.top.location.href=window.location.href;
}
</script>

此代码将您页面 iframe 的容器地址更改为您的页面地址并强制容器显示您的页面。

【讨论】:

  • sandbox iframe 上的属性允许禁止此类框架转义黑客攻击。因此,如果您担心安全问题,这种方式不是防止框架的安全方式。
【解决方案5】:

或者,如果您不介意某些位置的内容,但又不想在某个网站上显示该内容,您也可以屏蔽某个特定域。例如,如果offendingdomain.com 嵌入了您的内容,您可以这样做:

<script type="text/javascript">
    if(document.referrer.indexOf("offendingdomain.com") != -1) {
        window.location = "http://www.youtube.com/watch_popup?v=oHg5SJYRHA0";
    }
</script>

这将检查父文档的位置,看看是否是 offendingdomain.com 正在嵌入您的内容。然后,此脚本会将 iframe 发送到某个著名的 youtube 视频作为惩罚。实际上,他们只是 Rick-Rolled 自己。

【讨论】:

    【解决方案6】:

    使用 javascript 检查是否已在 iframe 上加载,方法是将以下脚本放在 php 文件的末尾,然后重定向到显示警告或通知不应使用 iframe 加载页面的页面。

    <script type="text/javascript">
    if(top.location != window.location) {
        window.location = '/error_iframe.php';
    }
    </script>
    

    【讨论】:

      【解决方案7】:
      <?php
          header("Content-Security-Policy: frame-ancestors 'none'");
      ?> 
      

      【讨论】:

        【解决方案8】:

        将 hosname 替换为域名

        if (window.top.location.host != "hostname") {
            document.body.innerHTML = "Access Denied";
        }
        

        【讨论】:

          【解决方案9】:

          我在标题顶部使用此 PHP 代码

          if($_SERVER['SERVER_NAME'] != 'yourwebsite.com'){
             header('location: yourwebsite.com');
          }
          

          如果有人为您的网站添加了 iframe,它将重定向到您的网站

          【讨论】:

            猜你喜欢
            • 2013-09-18
            • 2014-06-12
            • 2017-11-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2017-05-22
            相关资源
            最近更新 更多