爬虫和反爬虫:如何防止黑产爬取我的数据?

138 阅读10分钟

在当今的互联网环境中,爬虫的广泛应用已成为一种常见现象,尽管内容提供者竭力防止自身数据被竞争对手获取,但从某些百科文章与维基百科的高度相似性来看,许多不良的数据获取行为仍在暗中被容忍。

回想早期一些购票网站的崛起历程,它们曾大量运用爬虫技术抓取航空公司的数据。为躲避航空公司的屏蔽,甚至采用众多个人电脑作为爬虫终端,致使航空公司难以辨别哪些是爬虫请求,哪些是用户操作。如此一来,当用户订票时,客服经理便能为用户提供充足的票务数据。

此外,一些相互竞争的电商、外卖公司内部甚至设立了专门的数据爬取小组,用于监控竞品数据,并实时调整自身业务的竞争策略,例如补贴政策、签约合作等。还有部分爬虫黑产利用招聘网站的漏洞,爬取并出售简历数据。对于一名 HR 而言,需花费几千元的年费才能查看上万份简历。然而,黑产只需多购买几个此类账号,就能从招聘网站大量窃取数据,再将其销售给不法分子,从而年获上千万利润。

鉴于此,本文将探讨“如何防止黑产爬取我的数据”这一话题,以增强大家对数据安全的重视。

一、爬取数据是否违法?

首先,爬取网站数据很可能构成违法行为。通常,一个网站会在其根路径下的 robots.txt 中明确规定哪些数据可被爬取。理论上,若要爬取某网站数据,应先获取其根目录下的 robots.txt 文件,查看其中内容,确定拟爬取的数据是否获得许可。

以下是 B 站的 robots.txt 内容示例:

User-agent: Yisouspider
Allow: /
User-agent: Applebot
Allow: /
User-agent: bingbot
Allow: /
User-agent: Sogou inst spider
Allow: /
User-agent: Sogou web spider
Allow: /
User-agent: 360Spider
Allow: /
User-agent: Googlebot
Allow: /
User-agent: Baiduspider
Allow: /
User-agent: Bytespider
Allow: /
User-agent: PetalBot
Allow: /
User-agent: *
Disallow: /

由此可见,如果是谷歌、苹果、360、百度等搜索引擎,B 站是欢迎其爬取内容的。但若是其他个人或组织,例如想爬取 B 站上所有大 V 的数据并将分析结果出售给他人(如某个 MCN 平台),实则触犯法律。依据我国刑法,可能会被判处非法获取计算机信息系统数据罪,情节严重者可能面临 3 年以上有期徒刑并处罚金。

之所以提及此事,是希望大家对网络信息安全有清晰明确的认识。互联网并非法外之地,行事之前务必深思熟虑。

二、辅助工具与法律责任

在未获许可的情况下爬取对方数据属于违法行为。但这里衍生出一个问题,比如您是招聘网站的付费用户,觉得其界面不够智能,于是自行编写程序,仅针对自身账号范围实现特定功能,对简历进行筛选以找到合适求职者,这是否违法?

这种行为并非违法。此可视为您自行制作的辅助工作的机器人。但倘若将此工具提供给他人,是否违法呢?实际上也不违法。然而,如果他人将此工具用于黑产活动,例如爬取用户数据进行简历买卖,那就构成了违法行为,构成犯罪的是买卖简历信息。若您是招聘网站的竞品,使用大量账号进行此类操作,还会构成非法竞争。

再举个例子,有人觉得 Github 不够智能,于是制作了一个插件,以帮助用户浏览 Github 中文件代码的目录树。本质上,此工具需运用爬虫部分技术——需爬取目录树。但这并非违法行为。但若有人借此工具将 Github 全部代码拿走,并在淘宝上打包售卖,这就属于违法行为。

三、爬虫的工作原理

探讨完法律问题,接下来谈谈爬虫的实现方式。爬虫的原理极为简单,本质上就是一次网络请求,然后将返回的数据保存下来。

对于搜索引擎的爬虫,通常会在请求头中添加自身标识,如百度会添加“baidu”字符串,以便网站服务器识别。

若爬虫属非法行为,往往需要伪装成浏览器。通常会使用浏览器内核来模拟发出网络请求,例如 Chromium(Chrome 的开源内核)就具备此能力。

当使用 Chromium 发起请求时,对于服务提供方的反爬虫系统,此请求会被视为一次标准的用户行为。若对方网站需登录才能爬取数据,此时不法分子会模拟登录行为。倘若仅是输入用户名和密码,该网站的登录行为极易被模拟,只需找到对应的接口,传入用户名和密码,即可获取访问资源的令牌。这便是多数网站登录时要求手机验证码登录、微信扫描或填写图片验证码的原因。

对于一些获取数据需付费的网站,如视频网站或 BOSS 这类招聘网站,用户需付费才能获取核心数据,此时不法分子可能会购买大量账号。为遏制此类行为,国家现已严厉打击销售手机卡号。请牢记,使用他人身份注册账号同样属于违法行为。

1. 关于验证码

当被爬取网站的登录接口设有验证码时,爬虫设计者通常会采取两种手段。一是破解验证码,在当今的人工智能时代,只要获取足够多的验证码图片样本,利用 tensorflow 进行分析,基本能达到 80%以上的识别率。因此,如今的网站通常不再使用简单的图片验证码,而是采用如拖动滑块、选中几张图片、计算数学题等方式增加破解难度。

所以,如果您的网站仍在使用普通图形验证码,且网站数据价值较高,务必尽早更换为更复杂、甚至多种验证码混合的形式。

2. 模拟用户动作

对于用于爬取数据的浏览器内核,通常还提供模拟用户行为的功能,比如点击按钮、滚动页面、输入文字等。切勿认为爬虫无法模拟这些用户行为,对于爬虫设计者而言,此乃基础操作。

3. 数据的提取

数据下载完成后,爬虫会尝试存储原始数据,随后进行离线分析。当然,也有部分爬虫在获取数据后立即进行分析。若要爬取网页数据,后续会用到 HTML 的解析器(Parser),在 Github 上可找到众多开源实现。若爬取的是接口数据,通常是分析 Json。有些网页数据由 JavaScript 渲染,对于此类网页,爬虫通常会模拟浏览器行为,在页面加载完成几秒后才开始下载网页内容。

4. 反追踪

对于黑产爬虫,还会进行 IP 的反追踪。所谓 IP 反追踪,即利用代理增加追踪难度。例如黑客在进行犯罪活动时通过多次代理,跨越多个国家,那么一国警方追踪难度极大。在爬虫领域,许多人会购买 IP 代理,例如一个非法收集 B 站统计数据的爬虫,为避免被 B 站追诉和屏蔽,可能会购买大量 IP,模拟成数百个用户使用 B 站。需注意,临时租用大量 IP 地址价格低廉,大大降低了犯罪成本。

四、反爬虫措施

接下来,介绍一些反爬虫的基本操作。

1. robots.txt

进行反爬虫时,首先要从法律层面告知爬虫哪些页面不可爬取。因此,应先编写好自己的 robots.txt,并放置于网站根目录。

2. 用户识别

接下来,对于高频访问的 IP 应予以关注。但仅依靠 IP 判断并不可靠,因为有时一家公司会共用一个 IP 出口地址。例如,一家猎头公司的数百名猎头可能会频繁使用拉勾网,从拉勾的数据来看,会出现大量重复 IP 访问。此时请问,是否应禁用这些 IP?答案当然是不能,因为这些都是付费用户。

此时,有一件非常值得做的事,就是运用设备指纹。对于一台设备,其 CPU 数量、CPU 序列号、屏幕分辨率、手机厂商等通常是固定的。如此可结合 IP 地址进行精细去重。这种技术被称为设备指纹,即利用设备信息生成一个唯一的字符串,由于生成算法非标准化,不同的数据安全团队会有各自的算法。

有了用户识别,就能根据唯一用户设定数据安全策略,如访问频次、黑名单等。

3. 字体加密

再介绍一种方法,即自行实现字符编码和字体文件,提高爬虫爬取数据的成本。

爬虫通常爬取的是用户可见的内容。若自行实现一套字符编码,例如打乱 UTF8 编码中的汉字顺序,然后对字体文件中对应的数据进行换序,得到新的字体文件。展示简历时,使用基于此字符集生成的字体文件。

如此,爬虫下载网页数据后,中文会出现乱码,因为爬虫无法理解我们创建的非标准字符集编码。而用户浏览网页时,能看到正确内容,这是字体文件发挥了作用。即便爬虫打开字体文件并与编码对应,也是极为复杂的工作。并且我们每天更换一次顺序,就能大幅增加黑产的爬取成本。

4. 加密传输

对于移动端 App 中的数据,若能进行加密传输,将显著提高爬取成本。因为 App 不同于浏览器,模拟 App 难度极大。App 数据抓取通常依赖于其使用的标准协议,例如使用 HTTPS 协议传输数据的 App,爬虫可在 App 端安装证书,然后利用代理实现中间人抓包。但如果数据采用自身协议加密,那么爬虫在抓包的同时,还必须破解此加密协议。

非法爬取数据难以完全杜绝,我们只能提高其成本。但一定要树立数据安全意识。在互联网世界中,数据是第一生产力,也是生命线。在完成开发工作之余,运用专业知识适当提高爬取数据的难度非常必要。

若公司要求编写爬虫爬取竞品数据,请先阅读竞品的 robots.txt 文件,查看是否允许。若此行为违法,也应适当提醒有此想法的决策者。国家对网络信息安全犯罪的打击力度只会越来越大。爬取数据看似简单,要做到毫无证据留存实则很难。当然,利用爬虫技术优化自身互联网产品使用体验,属于法律允许的辅助机器人范畴。

文章(专栏)将持续更新,欢迎关注公众号:服务端技术精选。欢迎点赞、关注、转发

个人小工具程序上线啦,通过公众号(服务端技术精选)菜单【个人工具】即可体验,欢迎大家体验后提出优化意见