【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
原文作者:西安鲲之鹏
原文链接:http://www.site-digger.com/html/articles/20150813/97.html
随着Web数据采集技术的普及,大量网站和移动App的海量数据面临着被抓取的威胁。从技术角度讲Web数据采集技术是模拟浏览器或手机客户端与Web服务器进行交互,该过程与合法的浏览器或手机客户端直接访问Web服务器并无本质的区别,这就增加了企业对自身数据保护的难度。
我们(西安鲲之鹏网络信息技术有限公司)是一家专业从事网站(Web)数据采集的数据服务提供商,一直专注于网站(Web)数据抓取领域。公司前身是开始于2010年的鲲鹏Web数据采集工作室,为澳大利亚、美国、香港、台湾、中国大陆等地提供Web数据采集外包服务,先后成功完成了数千个数据采集项目。有着非常丰富的网站数据采集和反网站数据采集经验。结合我们自身丰富的数据采集经验,我们给出以下三种行之有效的反Web数据抓取方案。
一、 限制客户端IP访问频率。
适用:Web网站和移动App。
代表应用:大众点评网。
思路:数据采集程序的特点就是访问速度快,通常一个客户端IP向Web
服务器发出数十个甚至上百个并发请求,根据该特征,我们可以在Web网站或移动App服务端程序增加策略,拦截频率过高的访问(中断连接或返回异常页面)。例如,我们限制一个IP对我们系统每天最大的访问量是100次,那么即便采集者拥有100个IP(或高匿名HTTP代理),每天的采集量也只能达到1万个页面,大大增加了采集的难度。
实现难度:中等。该方案只需要对服务端程序进行修改,不需要修改客户端。
效果:好。可以有效防止大规模的采集。
二、 数据传输加密。
适用:Web网站和移动App。
代表应用:去哪儿网。
思路:对服务端和客户端(包括浏览器)之间的HTTP交互数据采用对称加密算法(例如,DES)进行保护:
1. HTTP请求:客户端 –> 服务端。
HTTP请求明文数据在发送出客户端之前使用密钥进行加密,这样采集者抓包分析只能看到无意义的密文数据,从而无法自己用程序实现一个有效的HTTP请求。密文数据到达服务端后先用密钥进行解密,然后再对明文进行处理。如下图所示。
2. HTTP应答:服务端 –> 客户端。
服务端程序在向客户端发出应答明文数据之前,先使用密钥对数据进行加密,这样采集者抓包分析看到的也是密文,从而无法对HTTP应答数据进行有效的提取。密文数据到客户端后先用密钥进行解密,然后再对明文进行展示。如下图所示。
实现难度:高。该方案需要对服务端和客户端程序都要进行修改,工作量比较大。
效果:非常好。可以有杜绝各种采集手段。
也可以仅对部分敏感数据进行加密保护,例如电话号码、邮箱、身份证号。其它非敏感数据仍然使用明文。
三、 加入签名机制。
适用:仅移动App。
代表应用:淘宝手机客户端。
思路:在HTTP请求中参加一个签名参数(下简称sign),用于在服务端检测该HTTP请求是否合法。当App程序发出一个HTTP请求时,根据QueryString, Post Entity, User-Agent等相关参数按照一定的算法(使用非对称加密)生成sign,并将sign于其它参数一起提交给服务端。服务端接收到HTTP请求后使用相同的算法根据QueryString, Post Entity, User-Agent等参数生成校验sign,如果两个sign的值相同则认为这是一个合法的请求(则接收该HTTP请求),反之即认为这是一个非法的请求(拒绝该请求)。
实现难度:高。该方案需要对服务端和客户端程序都要进行修改,工作量比较大。
效果:非常好。可以有杜绝各种采集手段。
来源:oschina
链接:https://my.oschina.net/u/140230/blog/511034