如何防止我的网站页面被加载到其他网站iframe?

时间:2013-09-14 09:24:47

标签: javascript php html iframe

我们有很多游戏网站,其中我在我的服务器上托管独家游戏,我不想从我的服务器访问我的游戏到其他网站。我想限制他们从我的服务器访问我的内容。

例如,假设我在www.abc.com这样的源路径上有一个名为www.abc.com/games/abcgame.swf的网站,我在其中托管了我的独家游戏。我希望其他网站持有者不要访问此内容。如果他们窃取了这个网址并尝试访问,那么我想显示一些自定义消息,例如“未找到游戏”或像“请访问www.abc.com来玩这个游戏”这样的somthig。等等。

任何人都有任何想法可以实现此功能吗?

4 个答案:

答案 0 :(得分:8)

第一种解决方案是使用X-Frame-Options标头来阻止您将网页加载到iframe。 X-Frame-Options可以指定两个值中的一个: SAMEORIGIN ,仅限于此 允许来自同一来源的iframe显示此内容,并允许deny阻止 这样做的任何iframe。但是此标头不是HTTP规范的一部分,并且是由Microsoft引入的,因此并非所有浏览器都支持此标头。 X-Frame-Options的一个例子:

X-Frame-Options: SAMEORIGIN

如果某些旧浏览器不支持X-Frame-Options标头。您可以尝试一种名为FrameKiller的技术。但是,如该链接所指出的那样存在局限性。

  

用户代理不支持JavaScript。

     

用户代理支持JavaScript,但用户已关闭支持。

     

用户代理的JavaScript支持存在缺陷或部分实施。

我们的想法是使用javascript来检测您的网页是否已加载到iframe中。有很多方法可以实现帧杀手脚本。

根据您的要求,您可以实现这样的帧杀手脚本:尝试访问您的父窗口以阅读window.location。如果他们在iframe中包含您的网页,则代码会抛出异常(跨域)

示例代码:

window.onload = function(){
   try
   {
       if (window.parent && window.parent.location.hostname !== "www.abc.com"){
          throw new Error();
       }
   }
   catch (e){
      alert("Please visit www.abc.com to play this game.");
      //You could do whatever you want here
   }
}

答案 1 :(得分:3)

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

它首先检查最顶部的帧是否是帧本身,如果它不是它将顶层帧更改为此帧。这是javascript。

答案 2 :(得分:1)

通过JavaScript执行此操作仅限于将内容限制为浏览器级别。您可能最好离开Apache mod_rewrite以更有效地阻止服务器级as explained here上的内容。

例如,如果您的服务器支持,您可以将此代码放在.htaccess文件中。我使用www.abc.com作为示例&匹配swf&以fla个文件为例:

RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http://(www\.)?abc.com/.*$ [NC]
RewriteRule ^.*\.(swf|fla)$ - [F] 

答案 3 :(得分:0)

您无法在 Chrome 中访问 window.parent.location。因此,请改用 document.referrer

 window.onload = function(){
    
       try
       {
           if (window.parent && document.referrer !== "https://www.yousite.com/"){
           console.log(document.referrer);
    
              throw new Error();
           }
       }
       catch (e){
          window.location.href = "https://yoursite.com";
       }
    
    }