如何防止黑产爬取数据?

news/2024/7/19 9:17:10 标签: python, 爬虫, 开发语言, 系统安全, 安全性测试

爬虫在当今的互联网中被大量地使用已经是约定俗成的潜规则,虽说内容的提供者都千方百计地防止自己的数据被竞品拿走,但是如果你去看一看某些百科中的文章和维基百科的相似程度,就知道很多不良的行为正在被默许着。

记得早期一些购票网站起家的时候,就大量使用爬虫技术爬取航空公司的数据,为了不让航空公司屏蔽,特意用了很多个人电脑做爬虫端,让航空公司无法分清哪些是爬虫、哪些是用户。这样,用户订票的时候,客服经理就有足够的票务数据提供给用户。

另外,一些相互竞争的电商、外卖公司,内部甚至会设立专门的数据爬取小组,用于监控竞品的数据,并且实时地调整业务的竞争策略——如补贴、签约等。还有一些爬虫的黑产利用招聘网站的漏洞,爬取并出售简历数据。对一个 HR 而言,花几千块钱的年费,才可以看上万份简历。而一个黑产,只需要多购买几个这样的账号,就可以从招聘网站中拿走大量的数据,再销售给不法分子,一年获得上千万的利润。

爬取数据违法吗?

首先,爬取一个网站的数据,很可能是违法行为。通常一个网站,会在自己根路径下的 robots.txt 中定义自己网页中哪些数据是可以用来爬取的。从理论上讲,如果你想爬取一个网站的数据,应该先获取它根目录下的 robots.txt 文件,查阅文件内容,看自己要爬取的数据是否被允许。

下面是 bilibili 的 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 发起请求的时候,对于服务提供方的反爬虫系统,你的请求就变成了一次标准的用户行为。如果对方网站需要登录才能爬取数据,这个时候,不法分子还会模拟登陆行为。如果仅仅是输入用户名和密码,那这个网站登录行为会非常容易模拟,只需要找到对方对应的接口,把用户名和密码传过去,就可以拿到访问资源的令牌。这就是大部分网站登录时需要你用手机验证码登录、微信扫描、或填写图片验证码的原因。

对于一些获取数据还需要付费的网站,比如说视频网站或拉勾这样的招聘网站,用户需要付费才能获取核心的数据,这个时候不法分子可能会购买大量的账号。为了防止不法分子获得大量的账号,现在国家已经在严打销售手机卡号的行为。所以请你记住,使用其他人的身份去注册账号,这也是一种违法行为。

关于验证码

当被爬取的网站登录接口有验证码时,爬虫的设计者通常会有两种手段。一种是破解验证码,在现在这个人工智能的时代,想要破解验证码只需要获得足够多的验证码图片样本,然后用 tensorflow 分析一下,基本上都可以做到一定的识别率,可以高于 80% 以上。所以现在的网站往往不会使用简单的图片验证码,比如说要拖动一个滑块、选中几张图片、算一道数学题等来增加破解成本。我见过最变态的网站验证码是一道化学题,我花了两个小时才注册成功。

所以你的网站如果还在使用普通的图形验证码,而你网站被攻克的代价也很高的话,请你务必早点更换验证码——更换成更难破解的,甚至多种验证码的混合。

模拟用户动作

对于一个爬取数据用的浏览器内核,往往还提供了模拟用户行为的功能。比如说点击按钮,滚动一下页面,输入一行文字。所以千万不要觉得,爬虫模拟不了这些用户行为,对于爬虫的设计者,这些都是基础操作。

数据的提取

当数据被下载下来之后,爬虫会尝试将原始数据存储,然后再进行离线分析。当然有的爬虫爬取了数据之后就马上进行分析。如果要爬取网页数据,后续会用到 HTML 的解析器(Parser),这个在 Github上 可以找到很多的开源实现。如果是爬取的接口数据,通常就是分析 Json。有的网页数据是由 JavaScript 渲染的,这种网页,通常爬虫会模拟浏览器的行为,在页面加载完成几秒之后才开始下载网页内容。

反追踪

对于黑产的爬虫,还会进行 IP 的反追踪。所谓 IP 的反追踪,就是利用代理,增加追踪的成本。比如黑客在从事犯罪活动时通过多次代理,跨了多个国家,那么一个国家的警方力量就很难追踪到他。在爬虫领域有很多人会购买 IP 代理,比如说一个非法的去 B 站收集统计数据的爬虫,为了防止 B 站的追诉以及防止 B 站安全策略的屏蔽,可能会购买大量的 IP,然后模拟成几百个用户在使用 B 站。你要注意,临时租用大量 IP 地址的价格低廉,这也大大降低了犯罪的成本。

爬虫

接下来,我们说说有关反爬虫的一些基本的操作。

robots.txt

在反爬虫的时候,第一步我们要先从法律上告诉爬虫哪些页面是不可以爬取的。所以我们要先写好自己的 robots.txt,并放到网站的根目录。

用户的识别

接下来我们对于高频访问的 IP 要予以关注。当然,仅仅通过 IP 来判断是不可取的。因为有的时候一家公司会共用一个 IP 出口地址。举个例子:一家猎头公司下面的几百个猎头,可能会每天疯狂的使用拉勾,因此从拉勾的数据上,你会看到大量的重复 IP 访问。这个时候我问你个问题,你禁不禁用这些 IP?当然不能禁用,这些都是付费用户。

那么这个时候有一件非常值得做的事情,就是使用设备的指纹。对于一个设备,它的 CPU 数量、CPU 序列号、屏幕的分辨率、手机的厂商等,通常是固定的。这样可以结合 IP 地址做精细去重。这项技术被称为设备指纹,就是利用设备上的信息,生成一个具有唯一性的字符串,因为这种生成算法是非标准化的,因此不同的数据安全团队会有自己的算法。

有了对用户的识别,就可以根据唯一用户设置数据安全策略,比如访问频次、黑名单等。

字体加密

再介绍一种方法是自己实现字符编码和字体文件,增加爬虫爬取数据的成本

爬虫爬取的通常就是用户本身可以看到的内容。如果自己实现一套自己的字符编码。比如将 UTF8 编码中的汉字打乱顺序,然后再将字体文件中对应的数据换序,得到字体文件。显示简历的时候,使用自己根据这个字符集生成的字体文件。

这样,爬虫下载到网页数据后,中文会乱码,这是因为爬虫无法理解我们创造的非标准字符集编码。当用户看到网页的时候,可以看到正确的内容,这是因为字体文件起了作用。即便爬虫将字体文件打开,和编码对应上,也是非常复杂的一个体力劳动。然后我们每天更换一次顺序,就可以给黑产增加相当大的爬取成本。

加密传输

对于移动端 App 中的数据,如果可以加密传输,也能大大增加爬取成本。因为 App 不是浏览器,想要模拟一个 App 是非常困难的。那么 App 的数据抓取就依赖于 App 数据传输使用的标准协议,比如一个用 HTTPS 协议传输数据的 App,爬虫可以在 App 端安装证书,然后再利用代理实现中间人抓包。但如果数据用自己的协议加密,那么爬虫抓包的同时,还必须能够破解这个加密协议。

总结

非法爬取数据是不可能完全杜绝的,我们只能提高非法爬取数据的成本。但是一定要有数据安全的意识。在互联网的世界里,数据是第一生产力,也是生命线。在完成开发工作之余,利用自己的专业知识适当提高爬取数据的成本是非常有必要的。

如果自己被公司要求写一个爬虫爬取竞品数据,请你先阅读下竞品的 robots.txt 文件,看看允不允许你这样做。如果这是一个违法行为,那么也可以适当提醒下有这样想法的决策者。 国家对网络信息安全犯罪的打击,只会越来越严。爬取数据看似简单,其实做到毫无证据保留是很难的。当然,利用爬虫技术,让自己在使用互联网产品的时候,可以消耗更少的时间,属于辅助机器人,这个是法律允许的。比如我就用爬虫技术监控拉勾教育中我自己专栏的订阅情况,当有同学订阅的时候我会收到邮件。


http://www.niftyadmin.cn/n/428856.html

相关文章

SIFT算法

文章目录 1. SIFT算法简介1.1 SIFT特征检测步骤1.2 SIFT算法的特点 2. SIFT算法原理2.1 尺度空间2.1.1 多分辨率金字塔2.1.2 高斯金字塔2.1.3 高斯尺度空间(使用不同的参数) 2.2 DoG空间极值检测(查找关键点)2.3 删除不好的极值点…

如何做到源代码防泄密

行业背景 当前,我国无人机产业发展成绩显著,从技术研发、产品生产、企业布局到市场规模、领域应用和产业细分,都取得了长足发展。预计未来三年,随着民用无人机的耐久性和使用成本等问题得到根本性的解决,无人机在民用…

建站记录1:开通阿里云,购买域名,安装宝塔+LAMP系统

个人建站: 因为宝塔系统(https://www.bt.cn),可以方便的部署zblog 彩色背景 什么是LAMP? Linux Apache PHP MySQL LAMP 是指Linux(操作系统) Apache (HTTP 服务器)…

华为OD机试真题 JavaScript 实现【寻找密码】【2023Q1 100分】,附详细解题思路

一、题目描述 小王在进行游戏大闯关,有一个关卡需要输入一个密码才能通过,密码获得的条件如下: 在一个密码本中,每一页都有一个由 26 个小写字母组成的若干位密码,从它的末尾开始依次去掉一位得到的新密码也在密码本…

华为OD机试之查找众数及中位数(Java源码)

查找众数及中位数 题目描述 众数是指一组数据中出现次数量多的那个数,众数可以是多个。 中位数是指把一组数据从小到大排列,最中间的那个数,如果这组数据的个数是奇数,那最中间那个就是中位数,如果这组数据的个数为偶…

pymongo更新数据

使用 PyMongo,可以通过以下步骤将查询到的记录进行更新: 下面是一个简单的示例代码片段,展示如何向名为users的集合中的所有文档添加一个新字段age。 import pymongo # 连接 MongoDB client pymongo.MongoClient("mongodb://localh…

使用am start命令启动android apk应用程序

使用am start命令启动android apk应用程序 am start -n {包(package)名}/{包名}.{活动(activity)名称}启动tbox service test apk adb root adb shell am start -n com.demo.hmi.xxxservices.xxx/.MainActivity 程序的入口类可以…

一文详解!嵌入式软件的自动化测试框架、测试流程与功能研究分析

目录 引言 1.嵌入式软件自动化测试平台分析 2.嵌入式软件自动化测试平台概要设计 3.嵌入式软件自动化测试平台详细设计 3.3 功能设计 引言 嵌入式软件是指被设计用于嵌入或控制另一个产品、设备或系统的软件。它在各种应用领域(例如消费电子、工业控制、医疗设…