如何有效地防止网站和手机APP的数据被采集?

烈酒焚心 提交于 2019-12-13 13:30:11

【推荐】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请求),反之即认为这是一个非法的请求(拒绝该请求)。

实现难度:高。该方案需要对服务端和客户端程序都要进行修改,工作量比较大。

效果:非常好。可以有杜绝各种采集手段。

特别说明:该文章为西安鲲之鹏的原创文章 ,你除了可以发表评论外,还可以转载到你的网站或博客,但是请保留源地址,谢谢!!(尊重他人劳动,你我共同努力)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!