沙唐桔

网站被恶意镜像解决方法

真心搞不懂,我这一个破博客居然会有人镜像,真是吃饱了撑啊!刚开始发现 Google 搜索博客会出现一下稀奇古怪的结果,没多在意,也不知道是怎么回事。后来知道那是被镜像了,然后 Google 找到了解决办法,折腾上去几天,好像真有点效果。

参考

1、张戈博客 - 分享一个网站防镜像以及解决七牛静态页面跳转的js方案

2、龙笑天下 - 网站被恶意镜像怎么办 一段代码轻松搞定(全面版)

可用方法

.htaccess 阻止 IP(龙笑天下)

这个方法简单粗暴,但是镜像站换了 IP 就失效了。我主要用来对付这货:https://fireproxy.crushus.com/cyhour.com,实测上面参考的代码除了阻止 IP 外,对这个站都无效。

获取镜像服务器 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($handle);
?>

然后访问你网站的镜像站点,在地址后面加 /ip.php,在你的网站根目录就能找到 ip.txt 文件,复制里面的 IP 地址。

修改 .htaccess 文件

在后面加上如下代码(xxx.xxx.xxx.xxx 修改为上面获得的 IP)

Order Deny,Allow
Deny from xxx.xxx.xxx.xxx

如果你使用 CDN,可以直接在 CDN 后台添加 IP 黑名单。这个时候你再刷新一下镜像站点,如无意外,已经 403 了。

csdn.net 版本

<div style="display:none;">
<img src="" onerror='setTimeout(function(){if(!/(csdn.net|iteye.com|baiducontent.com|googleusercontent.com|360webcache.com|sogoucdn.com|bingj.com|baidu.com)$/.test(window.location.hostname)){window.location.href="\x68\x74\x74\x70\x73\x3a\x2f\x2f\x77\x77\x77\x2e\x63\x73\x64\x6e\x2e\x6e\x65\x74"}},3000);'>
</div>

结合 WordPress 版本:

// http://php.net/manual/zh/function.bin2hex.php url 字符串转十六进制
if ( !function_exists( 'str2hex_encode' ) ) {
function str2hex_encode($data) {
$data = "\\x" . substr(chunk_split(bin2hex($data),2,"\\x"),0,-2);
return $data;
}
}

// 网站防止被恶意镜像 https://cyhour.com/510/ 最后更新时间:20180915
add_action('wp_footer','theme_deny_mirrored_websites');
function theme_deny_mirrored_websites(){
$myurl = parse_url(esc_url( home_url('/') ), PHP_URL_HOST);
$myurl = preg_replace("/^www\./", "", $myurl); //eg:cyhour.com
//镜像站超时 3600ms 跳转回源站(蜘蛛例外)
echo '<div style="display:none;"><img src="" onerror=\'setTimeout(function(){if(!/('.$myurl.'|google.com|googleusercontent.com|360webcache.com|sogoucdn.com|bingj.com|baiducontent.com|baidu.com)$/.test(window.location.hostname)){window.location.href="'.str2hex_encode(esc_url( get_permalink() )).'"}},3600);\'></div>';
}

WordPress 专用版(龙笑天下)

/**
* 网站被恶意镜像 http://www.ilxtx.com/mirrored-website.html 最后更新时间:20171022
*/
add_action('wp_footer','theme_deny_mirrored_websites');
function theme_deny_mirrored_websites(){
$currentDomain = 'cyhour." + "com';
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) }\' />';
}

注意:旧版本 onerror 死循环会造成浏览网页的电脑高负载(CPU飙升),详见:博客网页导致电脑CPU飙升的问题解决记录


禁止 UA 为空或含有 PHP 的请求(张戈博客)

if(!is_admin()) {
add_action('init', 'deny_mirrored_request', 0);
}
function deny_mirrored_request()
{
$ua = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : '';
if( ( empty( $ua ) ) || preg_match('/PHP/i', $ua)) {
header("Content-type: text/html; charset=utf-8");
wp_die('请勿采集本站,因为采集的站长木有小JJ!');
}
}

附:http 跳转 https 的 js 代码(张戈博客)

<script type="text/javascript">
/* 如果当前是http访问,那么跳转到对于的https页面 */
if (document.location.protocol != "https:") {
location.href = location.href.replace(/^http:/,"https:");
}
</script>

完。