我们有很多游戏网站,其中我在我的服务器上托管独家游戏,我不想从我的服务器访问我的游戏到其他网站。我想限制他们从我的服务器访问我的内容。
例如,假设我在www.abc.com
这样的源路径上有一个名为www.abc.com/games/abcgame.swf
的网站,我在其中托管了我的独家游戏。我希望其他网站持有者不要访问此内容。如果他们窃取了这个网址并尝试访问,那么我想显示一些自定义消息,例如“未找到游戏”或像“请访问www.abc.com
来玩这个游戏”这样的somthig。等等。
任何人都有任何想法可以实现此功能吗?
答案 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";
}
}