網站被惡意鏡像怎么辦:一段PHP代碼就能幫你解決問題

  • A+
所屬分類:SEO實戰技巧
網站被惡意鏡像怎么辦,怎么解決呢?立金哥(www.abushamil.com)教你用php一段代碼輕松搞定!經常排名上去了,就發現自己的網站被人惡意鏡像,這篇文章具有一定的參考借鑒價值,希望對又需要的朋友又所幫助!

有時候你會發現,你在搜索引擎輸入網站名稱的時候,出來的網站信息是你們的,但是域名卻是一個陌生的,這種情況可以基本確定網站被鏡像了,那么究竟什么叫網站被鏡像?

惡意鏡像,也叫惡意克隆,惡意解析,是指有人通過域名 A 記錄直接解析別人 IP 地址,從而得到一個在訪問者眼中完全相同網站的過程。其工作原理基本上是這樣子的:有用戶訪問鏡像站點時,程序就會來正版的站點查詢數據,并修改相關鏈接然后呈獻給用戶,實質上還是在讀取原站的數據。嚴謹一點的解釋:通過復制整個網站或部分網頁內容并分配以不同域名和服務器,以此欺騙搜索引擎對同一站點或同一頁面進行多次索引的行為 。

網站被鏡像的危害

通俗的講,惡意鏡像者意圖利用自己有一定權重的域名進行威壓,通過某些手段復制了你的站點,除了域名不一樣之外,其他內容一模一樣,用戶或許根本無法分辨。甚至對于一些新的站點,搜索引擎都會迷惑到底哪個是真的站點,那么就有可能正牌的網站被刪除收錄,而盜版的卻被搜索引擎青睞。

雖然目前我們還不知道惡意鏡像我們的網站到底有什么意圖,但肯定對我們沒什么好處,如果他這個域名有點什么不健康的信息,那么我們被鏡像的站點有可能被污染掉,所以還是要警惕這個現象。

如何知道自己的網站是否被鏡像

復制自己網站的完整標題(PS:查看自己站點首頁源碼,其中 <title>龍笑天下 - 分享悲傷;共享快樂</title>),然后在谷歌和百度等搜索引擎里搜索,如搜索:intitle 龍笑天下 - 分享悲傷;共享快樂,如果有其他網站的網站標題、描述及網站內容跟你的一樣,只有域名不一樣,那就是被鏡像了。

如何處理網站被鏡像

這類鏡像看似一個完整的站點,其實上是每次用戶訪問鏡像站點,程序就會來正版的站點查詢數據,并修改相關鏈接然后呈獻給用戶。實質上還是在讀取原站的數據。以下龍笑天下就列舉幾種解決方法,大家自行取舍使用!

方法 1:查清鏡像網站的主機 Ip,通過禁止 Ip 來解決

本教程基于 WordPress 程序,其他系統請自測!

1、獲取鏡像服務器 ip。注:這個 IP 可能不是 ping 到他域名的 IP

復制如下代碼,新建一個 php 文件,并命名為“ip.php”上傳到你的網站根目錄。

<?php
$file = "ip.txt"; //保存的文件名
$ip = $_SERVER['REMOTE_ADDR'];
$handle = fopen($file, 'a');
fwrite($handle, "IP Address:");
fwrite($handle, "$ip");
fwrite($handle, "\n");
fclose($handele);
?>

從上面獲取的IP如:104.194.16.230 (美國)

2、然后訪問你網站的鏡像站點在地址后面加.../ip.php,然后你就會在網站根目錄找到 ip.txt 文件了,打開復制里面的 ip 地址。

3、然后打開你的.htaccess 文件

在后面加上如下代碼(自行修改為剛剛獲得的 ip)

#添加IP黑名單
Order Deny,Allow
Deny from 162.158.72.179

#添加IP黑名單
Order Deny,Allow
Deny from 162.158.72.179

 

當然,如果你使用 CDN,可以直接在 CDN 后臺添加 ip 黑名單

這個時候你再刷新一下鏡像站點,是不是已經 403 報錯了呢?這個時候已經解決了這個鏡像站點,然后就等待蜘蛛將其解決掉吧。

此方法的缺點就是如果鏡像網站更換了 ip,那我們的屏蔽就失敗了。

方法 2:JS 來防護

在頭部標簽:

<head></head>

<head></head>

里加上下面的 JS 代碼:

<script type="text/javascript">
if (document.location.host != "www.abushamil.com") {
location.href = location.href.replace(document.location.host,'www.abushamil.com');
} </script>

 

或加上以下的 JS 代碼:

<script type="text/javascript">
rthost = window.location.host;
if (rthost != "www.abushamil.com") {
top.location.href = "http://www.abushamil.com";
}
</script>

注意:將上面代碼中的www.abushamil.com改為你網站的首頁主地址,如果我上面填寫的不是我網站的主地址 www.abushamil.com,而是f9seo.com的話,就會導致網站一直刷新!

注:經過本站測試,如果鏡像站屏蔽了 JS,則該方法失效。所以,最好把方法 2 和方法 3 結合使用!

方法 3:Js 被屏蔽后防止鏡像的方法

將以下代碼加到網站的 header.php 中:

<div style="display:none;">
<script>proxy2016 = false;</script>
<img src="" onerror='setTimeout(function(){if(typeof(proxy2016)=="undefined"){window.location.host="www.abushamil.com";}},3000);'>
</div>

有些網站會屏蔽掉 JS 代碼(如下面的代碼) :

<script>...</script><script>...</script>

所以 <script>proxy2016 = false;</script> 代碼將被過濾掉,img 的 onerror 設置超時時間 3000 毫秒,將運行函數部分,檢測是否還存在 proxy2016 字符,如果沒有找到就會將主機的 URL 改為 www.abushamil.com;為了安全起見,將 js 部分可以使用 js 代碼混淆(本站“JS 代碼混淆” 工具 或 站長之家 JS 混淆工具)。
本站的混淆結果如下:

<div style="display:none;">
<script>proxy2016 = false;</script>
<img src=" " onerror='setTimeout(function(){if(typeof(proxy2016)=="undefined"){window["\x6c\x6f\x63\x61\x74\x69\x6f\x6e"]["\x68\x6f\x73\x74"]="\x77\x77\x77\x2e\x69\x6c\x78\x74\x78\x2e\x63\x6f\x6d";}},3000);'>
</div>

經過我的測試,此代碼在 Chrome、IE11 和 360 極速瀏覽器上均有效,會跳轉到源站的原文章頁!在 Firefox 上則無效果,鏡像的文章頁并不會跳轉到原站...... 將代碼中 img 標簽的 src 引用地址改為空格或無效的圖片地址后,在 Firefox 上也起作用了!

方法 4:借助 Img 的 Onerror 事件

20161119 更新(增加搜狗快照支持):此方法使用了后,會導致百度快照、谷歌快照、必應快照和搜狗快照等跳到 404 頁面(360 搜索快照則不會~),奈何不知怎么弄,2016-11-10 再次經過張戈的指導,將原代碼中的:

if( str1!=str3 ) 改為 :if( str1!=str3 && str3!="cache.baiducontent.com" && str3!="webcache.googleusercontent.com" && str3!="c.360webcache.com" && str3!="cncc.bingj.com" && str3!="snapshot.sogoucdn.com" ) 。估計要等快照更新時才能知道效果了!

20161127:經過驗證,上述更新已經起作用了!具體效果,請點我~

20171022 更新:從張戈那看到,這段代碼會因為 onerror 死循環造成瀏覽網頁的電腦高負載(CPU 飆升),因此在代碼 onerror 觸發事件中加入 onerror 清空機制,即加入this.onerror=null?!静┛途W頁導致電腦 CPU 飆升的問題解決記錄】

通過拆分域名鏈接與鏡像站比對,然后用 img 標簽 src 空值觸發 onerror 來執行 js 比對,比對失敗則跳轉回源站。

①、WordPress 專用版

經過 @張戈 童學的不斷改進(IE 不支持 window.stop() 函數,所以“20160909 版本”失效...),已經完美的適配 Firefox、Chrome、IE11 和 360 極速瀏覽器,而且可以跳轉至源站的相應文章頁,在此衷表感謝!下面 3 段任選一個即可。

代碼如下:(復制粘貼到主題的 functions.php 最后一個?>之前)

/**
* 網站被惡意鏡像怎么辦 一段代碼輕松搞定(全面版) - 龍笑天下
* https://www.ilxtx.com/mirrored-website.html
* 最后更新時間:20171022 發布時間:20160912
* 出自:zhangge.net
*/
add_action('wp_footer','lxtx_deny_mirrored_websites');
function lxtx_deny_mirrored_websites(){
$currentDomain = 'www" + ".ilxtx." + "com';
// $currentDomain = '"zhangge." + "net"';
echo '<img style="display:none" src=" " onerror=\'this.onerror=null;var str1="'.$currentDomain.'";str2="docu"+"ment.loca"+"tion.host";str3=eval(str2);if( str1!=str3 && str3!="cache.baiducontent.com" && str3!="webcache.googleusercontent.com" && str3!="c.360webcache.com" && str3!="cncc.bingj.com" && str3!="snapshot.sogoucdn.com" ){ do_action = "loca" + "tion." + "href = loca" + "tion.href" + ".rep" + "lace(docu" +"ment"+".loca"+"tion.ho"+"st," + "\"' . $currentDomain .'\"" + ")";eval(do_action) }\' />';
}
/**
* 網站被惡意鏡像怎么辦 一段代碼輕松搞定(全面版) - 龍笑天下
* 最后更新時間:20171022 發布時間:20160912
*/
add_action('wp_footer','lxtx_deny_mirrored_websites');
function lxtx_deny_mirrored_websites(){
$currentDomain = 'www" + ".ilxtx." + "com';
// $currentDomain = '"zhangge." + "net"';
echo '<img style="display:none" src=" " onerror=\'this.onerror=null;var str1="'.$currentDomain.'";str2="docu"+"ment.loca"+"tion.host";str3=eval(str2);if( str1!=str3 && str3!="cache.baiducontent.com" && str3!="webcache.googleusercontent.com" && str3!="c.360webcache.com" && str3!="cncc.bingj.com" && str3!="snapshot.sogoucdn.com" ){ do_action = "loca" + "tion." + "href = loca" + "tion.href" + ".rep" + "lace(docu" +"ment"+".loca"+"tion.ho"+"st," + "\"' . $currentDomain .'\"" + ")";eval(do_action) }\' />';
}

Ps:如果是丟到 wp_head,經過測試發現圖片放到 head,瀏覽器會自動進行錯誤調整,導致一些本來在 head 的元素被丟到了 body 當中,比如 style.css,估計網頁標準中 head 里面就不應該放置圖片,所以移到了 footer 當中。

/**
* 網站被惡意鏡像怎么辦 一段代碼輕松搞定(全面版)
*/
add_action('wp_footer','lxtx_deny_mirrored_websites');
function lxtx_deny_mirrored_websites(){
$currentDomain = "www' + '.f9seo.' + 'com";
// $currentDomain = "f9seo' + '.' + 'com";
echo '<img style="display:none" src="nothing" onerror="this.onerror=null;var str1=\''.$currentDomain.'\';str2=\'docu\'+\'ment.loca\'+\'tion.host\';str3=eval(str2);if( str1!=str3 ){ do_action = \'loca\' + \'tion.\' + \'href = loca\' + \'tion.href\' + \'.rep\' + \'lace(docu\' +\'ment\'+\'.loca\'+\'tion.ho\'+\'st,\' + \'\\\'' . $currentDomain .'\\\'\' + \')\';eval(do_action) }" />';
}
/**
* 網站被惡意鏡像怎么辦 一段代碼輕松搞定(全面版) - 龍笑天下
*/
add_action('wp_footer','lxtx_kimsom_reverse_proxy_defense', 99);
function lxtx_kimsom_reverse_proxy_defense(){
$currentDomain = '"www." + "ilxtx" + ".com"';
echo '<img style="display:none" id="inlojv-rpd" src="nothing" data-url="'.home_url().'" onerror=\'this.onerror=null;var str0=document.getElementById("inlojv-rpd").attributes.getNamedItem("data-url").nodeValue;var ishttps="https:"==document.location.protocol?true:false;if(ishttps){var str1="https"+"://";}else{var str1="http"+"://";}var str2='.$currentDomain.';var str3=str1+str2;if( str0!=str3 ){location.href = location.href.replace(document.location.host,'. $currentDomain .');}\'/>';
}

Tips:如果想像“20160909 版本”一樣有個提示語,可將上面這段代碼改為此

add_action('wp_footer','lxtx_kimsom_reverse_proxy_defense', 99);
function lxtx_kimsom_reverse_proxy_defense(){
$currentDomain = '"www." + "f9seo" + ".com"';
echo '<img style="display:none" id="inlojv-rpd" src="nothing" data-url="'.home_url().'" onerror=\'this.onerror=null;var str0=document.getElementById("inlojv-rpd").attributes.getNamedItem("data-url").nodeValue;var ishttps="https:"==document.location.protocol?true:false;if(ishttps){var str1="https"+"://";}else{var str1="http"+"://";}var str2='.$currentDomain.';var str3=str1+str2;if( str0!=str3 ){alert("\u8b66\u544a\uff01\u68c0\u6d4b\u5230\u8be5\u7f51\u7ad9\u4e3a\u6076\u610f\u955c\u50cf\u7ad9\u70b9\uff0c\u5c06\u7acb\u5373\u4e3a\u60a8\u8df3\u8f6c\u5230\u5b98\u65b9\u7ad9\u70b9\uff01");location.href = location.href.replace(document.location.host,'. $currentDomain .');}\'/>';
}
/**
* 網站被惡意鏡像怎么辦 一段代碼輕松搞定(全面版) - 龍笑天下
*/
add_action('wp_footer','lxtx_kimsom_reverse_proxy_defense');
function lxtx_kimsom_reverse_proxy_defense(){
$domain_arr = explode('//',home_url());
$domain = $domain_arr[1];
echo '<img style="display:none" id="inlojv-rpd" src="nothing" data-url="'.home_url().'" onerror="this.onerror=null;var str0=document.getElementById(\'inlojv-rpd\').attributes.getNamedItem(\'data-url\').nodeValue;var ishttps=\'https:\'==document.location.protocol?true:false;if(ishttps){var str1=\'https\'+\'://\';}else{var str1=\'http\'+\'://\';}var str2=\''.$domain.'\';var str3=str1+str2;if( str0!=str3 ){alert(\'\u8b66\u544a\uff01\u68c0\u6d4b\u5230\u8be5\u7f51\u7ad9\u4e3a\u6076\u610f\u955c\u50cf\u7ad9\u70b9\uff0c\u5c06\u7acb\u5373\u4e3a\u60a8\u8df3\u8f6c\u5230\u5b98\u65b9\u7ad9\u70b9\uff01\');if (!!(window.attachEvent && !window.opera)){document.execCommand(\'stop\');}else{ window.stop();}var str4=\'wind\'+\'ow.loca\'+\'tion.rep\'+\'lace(str3)\';eval(str4);}">';
}
/**
* 網站被惡意鏡像怎么辦 一段代碼輕松搞定(全面版) - 龍笑天下
*/
add_action('wp_footer','lxtx_kimsom_reverse_proxy_defense');
function lxtx_kimsom_reverse_proxy_defense(){
$domain_arr = explode('//',home_url());
$domain = $domain_arr[1];
echo '<img style="display:none" id="inlojv-rpd" src="nothing" data-url="'.home_url().'" onerror="this.onerror=null;var str0=document.getElementById(\'inlojv-rpd\').attributes.getNamedItem(\'data-url\').nodeValue;var ishttps=\'https:\'==document.location.protocol?true:false;if(ishttps){var str1=\'https\'+\'://\';}else{var str1=\'http\'+\'://\';}var str2=\''.$domain.'\';var str3=str1+str2;if( str0!=str3 ){alert(\'\u8b66\u544a\uff01\u68c0\u6d4b\u5230\u8be5\u7f51\u7ad9\u4e3a\u6076\u610f\u955c\u50cf\u7ad9\u70b9\uff0c\u5c06\u7acb\u5373\u4e3a\u60a8\u8df3\u8f6c\u5230\u5b98\u65b9\u7ad9\u70b9\uff01\');if (!!(window.attachEvent && !window.opera)){document.execCommand(\'stop\');}else{ window.stop();}var str4=\'wind\'+\'ow.loca\'+\'tion.rep\'+\'lace(str3)\';eval(str4);}">';
}

添加以上代碼之后,再打開鏡像站就會彈出提示:“警告!檢測到該網站為惡意鏡像站點,將立即為您跳轉到官方站點!”,并在關閉或確定此提示后直接跳轉到被鏡像的網站。經過本站測試,本方法防止網站被鏡像目前有效。

此方法在 IE11 上,會彈出提示框,但點擊“確定”按鈕后,網頁并不會跳轉。。。Firefox、Chrome 和 360 極速瀏覽器上則沒此問題!

②、HTML 通用版

既然是利用 js 代碼,那么就能用到如何 html 頁面當中了。要不是為了可以放到 wp 的 functions.php,都沒必要寫成 php 的模式,直接用 html 代碼即可:
<img style="display:none" src=" " onerror='this.onerror=null;var currentDomain="www." + "f9seo" + ".com"; var str1=currentDomain; str2="docu"+"ment.loca"+"tion.host"; str3=eval(str2);

if(str1!=str3&&str3!="cache.baiducontent.com"&& str3!="webcache.googleusercontent.com"&&str3!="c.360webcache.com"&& str3!="cncc.bingj.com" && str3!="snapshot.sogoucdn.com" ){ do_action = "loca" + "tion." + "href = loca" + "tion.href" + ".rep" + "lace(docu" +"ment"+".loca"+"tion.ho"+"st," + "currentDomain" + ")";eval(do_action) }' />

將以上代碼中的: var currentDomain="www." + "f9seo" + ".com"; 自行拆分成自己的域名,避免被鏡像代碼替換掉,比如: var currentDomain="f9seo." + "com";

然后將代碼添加到網站的 <body> 之后即可(不建議放置到 <head> 里面,具體原因上文已說明),這個版本適合任何網頁。

方法 5:通過禁止某些 User Agent 特征來防

服務器反爬蟲攻略:Apache/Nginx/PHP 禁止某些 User Agent 抓取網站
我們都知道網絡上的爬蟲非常多,有對網站收錄有益的,比如百度蜘蛛(Baiduspider),也有不但不遵守 robots 規則對服務器造成壓力,還不能為網站帶來流量的無用爬蟲,比如 YY 蜘蛛(Yis...

參考上面這篇文章來禁止 UA 為 PHP 的抓取網頁,從而達到防鏡像的目的!

①、PHP 通用版:

將下面的代碼貼到網站入口文件 index.php 中的第一個 <?php之后即可:
//防止惡意HTTP_USER_AGENT采集
$ua = $_SERVER['HTTP_USER_AGENT'];
$now_ua = array('FeedDemon ','BOT/0.1 (BOT for JCE)','CrawlDaddy ','Java','Feedly','UniversalFeedParser','ApacheBench','Swiftbot','ZmEu','Indy Library','oBot','jaunty','YandexBot','AhrefsBot','MJ12bot','WinHttp','EasouSpider','HttpClient','Microsoft URL Control','YYSpider','jaunty','Python-urllib','lightDeckReports Bot','PHP');
if(!$ua) {
header("Content-type: text/html; charset=utf-8");
die('請勿采集本站,采集者木有小JJ!請正常訪問,并認準【立金哥自媒體】官方網址!');
}else{
foreach($now_ua as $value )
if(eregi($value,$ua)) {
header("Content-type: text/html; charset=utf-8");
die('請勿采集本站,采集者木有小JJ!請正常訪問,并認準【立金哥自媒體】官方網址!');
}
}

②、Wordpress 適用版

如果使用上面的 php 版本,WordPress 每次更新就會需要操作 index.php,比較麻煩,因此弄個專版。

將下面的代碼貼到 functions.php 中的最后一個 ?>之前即可:
/**
* 網站被惡意鏡像怎么辦 一段代碼輕松搞定(全面版)【立金哥自媒體】
*/
//防止惡意HTTP_USER_AGENT采集
add_action('wp_head', 'lxtx_deny_mirrored_request', 0);
function lxtx_deny_mirrored_request()
{
$ua = $_SERVER['HTTP_USER_AGENT'];
$now_ua = array('FeedDemon ','BOT/0.1 (BOT for JCE)','CrawlDaddy ','Java','Feedly','UniversalFeedParser','ApacheBench','Swiftbot','ZmEu','Indy Library','oBot','jaunty','YandexBot','AhrefsBot','MJ12bot','WinHttp','EasouSpider','HttpClient','Microsoft URL Control','YYSpider','jaunty','Python-urllib','lightDeckReports Bot','PHP');
if(!$ua) {
header("Content-type: text/html; charset=utf-8");
wp_die('請勿采集本站,采集者木有小JJ!請正常訪問,并認準【立金哥自媒體】官方網址!');
}else{
foreach($now_ua as $value )
if(eregi($value,$ua)) {
header("Content-type: text/html; charset=utf-8");
wp_die('請勿采集本站,采集者木有小JJ!請正常訪問,并認準【立金哥自媒體】官方網址!');
}
}
}

/**
* 網站被惡意鏡像怎么辦 一段代碼輕松搞定(全面版)
*/
//防止惡意HTTP_USER_AGENT采集
add_action('wp_head', 'lxtx_deny_mirrored_request', 0);
function lxtx_deny_mirrored_request()
{
$ua = $_SERVER['HTTP_USER_AGENT'];
$now_ua = array('FeedDemon ','BOT/0.1 (BOT for JCE)','CrawlDaddy ','Java','Feedly','UniversalFeedParser','ApacheBench','Swiftbot','ZmEu','Indy Library','oBot','jaunty','YandexBot','AhrefsBot','MJ12bot','WinHttp','EasouSpider','HttpClient','Microsoft URL Control','YYSpider','jaunty','Python-urllib','lightDeckReports Bot','PHP');
if(!$ua) {
header("Content-type: text/html; charset=utf-8");
wp_die('請勿采集本站,采集者木有小JJ!請正常訪問,并認準【立金哥自媒體】官方網址!');
}else{
foreach($now_ua as $value )
if(eregi($value,$ua)) {
header("Content-type: text/html; charset=utf-8");
wp_die('請勿采集本站,采集者木有小JJ!請正常訪問,并認準【立金哥自媒體】官方網址!');
}
}
}

經過測試,在 functions.php 中加入此代碼后,打開鏡像站后顯示“Internal Server Error”,強制刷新后顯示我們設置好的提示文字“請勿采集本站,采集者木有小 JJ!請正常訪問,并認準【立金哥自媒體】官方網址!”。

友情提示:建議方法 2方法 3 一起使用!方法 4 包含方法 2 和方法 3~

weinxin
虎糾自媒體官方微信
這是我的微信掃一掃
f9seo

發表評論

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: