Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何防止通过iFrame的第三方站点框架加载我的站点页面_Php_Python_Iframe_Http Headers_Frame - Fatal编程技术网

Php 如何防止通过iFrame的第三方站点框架加载我的站点页面

Php 如何防止通过iFrame的第三方站点框架加载我的站点页面,php,python,iframe,http-headers,frame,Php,Python,Iframe,Http Headers,Frame,如何在页面加载过程中发现我的页面作为框架嵌入到其他站点?我猜推荐人请求标题在这里帮不了我?谢谢 您无法从服务器端进行检查,但可以在页面加载后使用javascript进行检测。比较top和self,如果它们不相同,则表示您在一个框架中 此外,一些现代浏览器尊重X-FRAME-OPTIONS标题,该标题可以有两个值: 拒绝–如果页面包含在框架中,则阻止该页面被呈现 SAMEORIGIN–同上,除非页面与顶级框架集持有者属于同一域 用户包括谷歌的Picasa,它不能嵌入框架中 支持标头的浏览器,最

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

您无法从服务器端进行检查,但可以在页面加载后使用javascript进行检测。比较
top
self
,如果它们不相同,则表示您在一个框架中

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

  • 拒绝–如果页面包含在框架中,则阻止该页面被呈现
  • SAMEORIGIN–同上,除非页面与顶级框架集持有者属于同一域
用户包括谷歌的Picasa,它不能嵌入框架中

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

  • IE8和IE9
  • 歌剧院10.50
  • 狩猎4
  • 铬4.1.249.1042
  • Firefox 3.6.9(较旧版本)

    • 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可以被禁用。

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

      <script type="text/javascript">
      if(top.location != window.location) {
          window.location = '/error_iframe.php';
      }
      </script>
      
      
      if(top.location!=window.location){
      window.location='/error_iframe.php';
      }
      
      或者,如果您不介意您的内容在某些位置,但不希望它出现在某个网站上,您可以阻止特定的域。例如,如果
      officingdomain.com
      正在嵌入您的内容,您可以这样做:

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

      这将检查父文档的位置,并查看是否是
      officingdomain.com
      嵌入了您的内容。这个脚本将把这个iframe发送到某个著名的youtube视频作为惩罚。事实上,他们只是自己翻滚

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

      <script type="text/javascript">
      if ( window.self !== window.top ) {
          window.top.location.href=window.location.href;
      }
      </script>
      
      
      如果(window.self!==window.top){
      window.top.location.href=window.location.href;
      }
      
      此代码将页面iframe的容器地址更改为页面地址,并强制容器显示页面。

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

      Content-Security-Policy: frame-ancestors 'none'
      
      (IE 11需要
      X-
      前缀)。您还可以将
      'none'
      更改为允许框架的原点,例如您自己的站点


      为了覆盖较旧的浏览器,最好将其与。

      将hosname替换为域名一起使用

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

      我将在页眉顶部使用此PHP代码

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

      如果有人对你的网站进行了iframe,它将重定向到你的网站

      嗨,John,我不能说我需要完整的解决方案,只要移动方向就足够了,在我找到问题的答案后,我总是将其作为答案发布,这是我参与社区的唯一方式。注意:设置元标记是无用的!例如,它没有效果。不要用它!只有像下面的例子一样通过HTTP头进行设置,X-Frame-Options才能工作。由于我是通过谷歌搜索偶然来到这里的,我要补充的是,Firefox在2010年8月添加了X-FRAME-OPTIONS,其中的FF3.6.9:iframe上的owasp
      sandbox
      属性允许禁止这种框架逃避攻击。所以,如果你担心的是安全问题,那么这种方法并不是一种安全的防止框架的方法。你的回答不够清楚,恕我直言。这是头代码还是PHP?例如,@GaryCarlyleCook这是一个HTTP头,在为页面提供服务时,它应该是浏览器响应的一部分。它不是PHP代码,尽管您可以使用PHP发送它;请看,如果您希望向将您的内容放入iframe的用户或其站点的最终用户(查看iframe中的内容)发送消息,则此方法特别有用。
      if($_SERVER['SERVER_NAME'] != 'yourwebsite.com'){
         header('location: yourwebsite.com');
      }