服务器反爬虫的验证方法及系统与流程

文档序号:19772099发布日期:2020-01-24 11:01阅读:440来源:国知局
服务器反爬虫的验证方法及系统与流程

本公开涉及网络安全领域,尤其涉及一种反爬虫的验证方法和服务器反爬虫的系统。



背景技术:

最新互联网安全公司imperva对全球10万个域名的网站访问进行分析,发布了一份《2016年机器流量报告》。称全球范围内约52%的互联网流量来自“机器人”,自2012年imperva公司监测网络流量以来,机器产生的网络流量就连续三年超过人类产生的流量,仅在2015年以微弱优势反超过一次,数据也很快被反扑。也就是说现有的网站大部分访问者不是人类而是自动化程序的执行。

机器人又分为善意机器人和恶意机器人。其中善意机器人指的是只是爬取有用的信息为己所用,如展示或都统计等。恶意机器人主要分为模拟人类的机器人,通常用于分布式拒绝服务(ddos)攻击以及刷票等、垃圾邮件机器人、黑客工具,其中最可恶的机器人是那些模拟正常用户活动的恶意机器人(ddos机器人就属于这一类),去年此类机器人占到了整体互联网流量的约24%。其中,最臭名昭著的包括nitol恶意软件、cyclone机器人和mirai恶意软件。

报告分析,之所以ddos机器人带来的网络流量如此之高,主要原因有两点,其一是目前模拟人类活动提交请求的实现成本非常低,但是收益非常高。比如一个春运的刷票机器人,不断模拟正常用户提交买票请求,很难找到有效方法来彻底规避这种行为,但是刷票提供者往往能从中获取不菲收益。其二是目前ddos的攻击手法对于黑客来说相当好用,用僵尸网络中的成千上万个机器来对一个目标发起看似合法的请求,造成服务器端私有信息资源被获取,间接造成经济损失,同时由于多数爬虫机器人夜以继日的访问,拖慢服务器的速度。

然而现在有技术主要在于服务器端对客户端通过js进行一个验证,保证是同一台客户端请求,此种可以有效的阻止普通机器人爬取,现在然而对于selenium+phantomjs+代理ip的形式确无有效的阻止方法。现在很多机器人使用selenium和phantomjs框架。selenium是一个强大的网络数据采集工具,最初是为网站自动化测试而开发的。近些它还被广泛用于获取精确的网站快照,由于它们可以直接运行在浏览器上。selenium可以让浏览器自动加载页面,获取需要的数据,甚至页面截屏,或者判断网站上某些动作是否发生等等功能。但是selenium自己不带浏览器,它需要与第三方浏览器结合在一起使用。所以服务器对于这种请求往往无法判断是正常人为访问还是机器人。而另一种phantomjs也代替真实的浏览器。同时phantomjs是一个“无头”(headless)浏览器。它会把网站加载到内存并执行页面上的javascript,但不会向用户展示网页的图形界面。因此,结合了selenium和phantomjs的强大的网络爬虫,可以处理cookie、javascript、header,以及任何你需要做的事情。

因此为了保护服务端数据被非法获取,以及减轻服务器压力,需要解决如何识别此客户端是否部署机器人自动化程序,同时也需要识别代理ip,从而通过技术手段来阻止爬虫机器人的访问。



技术实现要素:

(一)要解决的技术问题

本公开提供了一种服务器的反爬虫的验证方法和反爬虫系统,以至少部分解决以上所提出的技术问题。

(二)技术方案

根据本公开的一个方面,提供了一种服务器反爬虫的验证方法,包括:服务器端接收登陆请求,并从服务器中取出加密函数,发送给客户端;服务器接收加密的客户端硬件信息,以及通过session对象携带发送的用户账户名,密码和当前访问ip数据后,将数据向缓存中存入session对象携带的各项信息,同时并正常返回网页数据;服务器对访问信息进行判断,每个的定时任务将缓存中的信息同步到访问统计模块,也就是存入数据库,并将缓存中生命周期设置单位时间内销毁。

在本公开一些实施例中,所述的验证方法还包括:客户端登录后发送请求信息到服务器端,当请求的时候客户端会共享一个session对象进行访问,通过函数设定不可直接通过子模块地址进行数据访问。

在本公开一些实施例中,所述的验证方法还包括:客户端将根据服务端回传的加密函数进行加密的硬件信息,连同用户账户名,密码和当前访问ip这三要素一起通过session对象携带发送到服务器,所述硬件信息包括由cpu、显卡、硬盘、内存和mac地址通过函数模块中的加密函数计算得出的硬件信息。

在本公开一些实施例中,进行加密数据处理的步骤包括:客户端在账号登录以后会从服务端获取到一个密钥a,将用户名和密码进行一次加密得到一个密钥b;密钥b和硬件信息转为json后再通过aes加密后得到加密的数据,然后将数据上传至服务器;服务器通过aes解密即可获取硬件信息数据和密钥b,再根据访问所带参数,到访问统计模块去查询,得到一个值,依据该值可以从函数模块中提取解密密钥c,密钥c是当前服务端响应数据所需要的;将响应数据和密钥c通过密钥b进行加密,再把其也封装成json后通过aes加密后发送给客户端,客户端可以根据aes解密后再经过密钥b解析得到最终的响应数据。

在本公开一些实施例中,所述服务器对访问信息进行判断的步骤包括:如果从缓存统计模块中统计得到同一硬件信息发出的请求在单位时间内超出阈值,则可以认定此客户端服务器存在爬虫行为,同时再从访问统计模块随机抽取一段时间进行统计是否超过阈值,如果缓存模块超过阈值,但是访问统计模块未超过阈值,则给出验证码进行验证,通过后可继续访问;如果给出验证码后并未得到处理,仍然进行请求,或者访问统计模块中也超过阈值则认定为爬虫机器人,转到结果处理模块提供虚假数据;同时判断请求ip是否变化,如果ip在变可认为该爬虫机器人使用了代理ip,将此ip在访问统计模块中标记为代理ip;后来如果有代理ip过来访问随机次数给出验证码进行验证后方可访问。

在本公开一些实施例中,所述服务器对访问信息进行判断的步骤包括:如果单位时间内同一账户在缓存统计模块中访问超过阈值,则认为此账户存在爬虫机器人行为,再判断随机时间内访问统计模块中该账户访问是否超过阈值,如果缓存模块超过阈值,但访问统计模块未超过则给出验证码进行验证,通过后可继续访问;如果给出验证码后并未得到处理,仍然进行请求,或者访问统计模块中也超过阈值,则认为是爬虫机器人,将转到结果处理模块提供虚假数据;同时判断硬件编码信息是否一致,如不一致则认为有多台爬虫机器人使用同一账户进行爬虫行为,获取其硬件编号信息进行记录,标记为爬虫服务器;如果为同一硬件服务器发出请求,则随机的给出验证码进行验证后方可正常访问。

根据本公开的另一个方面,提供了一种服务器反爬虫的系统,包括:函数模块,用于存储多个加密函数和算法,所述函数模块包含加密客户端请求时共享的session对象携带的数据,所述session对象携带的数据作为唯一识别标识供服务端统计;缓存统计模块,用于把单位时间内访问的数据存入缓存模块,同时设置同一个缓存可访问服务端的过期时间为可调状态,通过函数模块中的统计模块处理后将最终的统计结果存入访问统计模块;访问统计模块用于统计随机时间内客户端请求服务端的所有数据;爬虫服务器认定模块基于访问统计模块中的数据和函数模块中的函数进行统计后,识别爬虫服务器,并将此硬件信息计入访问统计模块。

在本公开一些实施例中,所述客户端共享的session对象携带的数据包括:当前访问的账户、硬件信息以及当前访问ip,所述硬件信息由cpu、显卡、硬盘、内存和mac地址通过函数模块中的加密函数计算得出,通过隐藏字段向服务器提交。

在本公开一些实施例中,所述访问统计模块进行统计的因素包括:当前访问的账户、硬件信息以及当前访问ip。

在本公开一些实施例中,所述的系统,还包括:代理ip识别模块,基于访问统计模块中的数据和函数模块中的函数进行统计后,识别代理ip并将此ip进行标记;数据模拟模块,用于在已经确认为爬虫时,存储服务器端数据模拟数据,供结果处理模块进行验证时使用;结果处理模块,用于根据爬虫服务器认定给出处理方式,结果处理方式分为两种,如果单位时间内超过阈值的给出友好提示,但是随机时间内访问都超过阈值的直接认定是爬虫机器人,不给出验证码,而是将请求结果转到数据模拟模块中获取。

在本公开一些实施例中,所述函数模块,还包含各种服务端对客户端身份识别标识,以及供爬虫服务器模块和代理ip识别模块认定的函数。

在本公开一些实施例中,所述函数模块,包括多种加密算法库,并且根据不同的时间会往库里添加加密算法。

(三)有益效果

从上述技术方案可以看出,本公开服务器的反爬虫验证方法和反爬虫的系统至少具有以下有益效果其中之一:

(1)本发明方法比传统的爬虫认证方法,由于请求头信息都可以伪造,但是爬虫服务器硬件信息是不容易改变,成本较高无法模拟。所以通过这种方式验证是否为爬虫服务器比较有效阻止爬虫机器人访问;

(2)本发明对比于普通的请求验证方式,采用session对象验证的方式相交于cookies的优势在于,网页如果以多个模块组成,且有分页的情况下,必须在同一个session对象操作,不允许单独访问子模块,可以有效的利用爬虫机器人长期打开不关闭的情况下占用内存的特点进行有效的控制爬虫机器人的访问;

(3)本发明相对于其它认定爬虫机器人的方法,是通过单位时间和随机时间内进行双重统计判断可以有效的防止将正常用户认定为爬虫机器人;

(4)本发明通过网页模块细化方式展示数据再加上严格的统计模块,可以有效防止数据被快速获取,同时通过统计可以长期的识别代理ip,通过标记过的ip进行识别,有效的控制代理ip使用来请求数据。

附图说明

图1为本公开实施例服务器反爬虫的方法的流程图。

图2为通过函数模块中的加密函数计算得出的硬件信息的流程图。

图3为本公开实施例服务器反爬虫的系统的示意图。

具体实施方式

本公开提供了服务器端的反爬虫系统和反爬虫的验证方法。为了克服网站信息被爬虫机器人通过技术手段批量获取信息,同时也导致服务器反应变慢,影响正常用户的体验的问题,为此提供一种服务器端的反爬虫系统及爬虫机器人的验证方法。通过多重验证以及对客户端访问的数据进行统计,进行通过内部算法进行统计,有效的识别机器人行为。防止数据被恶意获取和降低拖慢服务器性能的风险。

为使本公开的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本公开进一步详细说明。

本公开某些实施例于后方将参照所附附图做更全面性地描述,其中一些但并非全部的实施例将被示出。实际上,本公开的各种实施例可以许多不同形式实现,而不应被解释为限于此数所阐述的实施例;相对地,提供这些实施例使得本公开满足适用的法律要求。

在本公开的第一个示例性实施例中,提供了一种服务器端的反爬虫验证方法。图1为本公开实施例服务器反爬虫的方法的流程图。如图1所示,本发明反爬虫系统是根据用户登录账户、当前访问ip以及硬件信息识别,这三个因素进行统计,统计结果后看是否在单位时间内或者随机时间内超过阈值,如超过则根据结果处理模块中的方法进行处理。

在进行反爬虫验证时,首先将网站信息分为多个模块,如果每个模块中数据较多,则可能通过分页的形式进行加载。本公开服务器端的反爬虫验证方法包括:

步骤a客户端登录后发送请求信息到服务器端。当请求的时候客户端会共享一个session对象进行访问,通过函数设定不可直接通过子模块地址进行数据访问;所述session对象存储特定用户会话所需的属性及配置信息;

步骤b服务器端接收请求,并从服务器中取出加密函数,发送给客户端。所述函数模块中包括多种加密算法库,并且根据不同的时间会往库里添加加密算法;

步骤c客户端将根据服务端回传的函数进行加密的硬件信息,连同用户账户名,密码和当前访问ip这三要素一起通过session对象携带发送到服务器。所述硬件信息包括由cpu、显卡、硬盘、内存和mac地址通过函数模块中的加密函数计算得出的硬件信息;

图2为步骤c中客户端进行加密数据处理的流程图。如图2所示,所述步骤c进一步包括:

子步骤c1客户端在账号登录以后会从服务端获取到一个密钥a,将用户名和密码进行一次加密得到一个密钥b;

子步骤c2密钥b和硬件信息(cpu、内存、硬盘、显卡、mac地址和当前访问ip)转为json后再通过aes加密后得到加密的数据,然后将数据上传至服务器;

子步骤c3服务器通过aes解密即可获取硬件信息数据和密钥b,再根据访问所带参数,到访问统计模块去查询,得到一个值,依据该值可以从函数模块中提取解密密钥c,密钥c是当前服务端响应数据所需要的;

子步骤c4将响应数据和密钥c通过密钥b进行加密,再把其也封装成json后通过aes加密后发送给客户端,客户端可以根据aes解密后再经过密钥b解析得到最终的响应数据。

步骤d.服务器接收数据后,并将数据向缓存中存入session对象携带的各项信息,同时正常返回网页数据。因为session对象会在浏览关闭后会销毁,所以如果用例如selenium或者phantomjs等浏览器自动化测试框架进行访问不能使用quit()退出方法才能获取数据,但是如未关闭在一定时间内会造成爬虫程序的服务器内存吃紧。采用session对象携带的各项信息可以有效地防止此类技术手段访问造成的内存吃紧。

步骤e.对访问信息进行判断,每个定时任务将缓存中的信息同步到访问统计模块,也就是存入数据库,并将缓存中生命周期设置单位时间内销毁。判断方法包括:

子步骤e1如果从缓存统计模块中统计得到同一硬件信息发出的请求在单位时间内超出阈值,则可以认定此客户端服务器存在爬虫行为,同时再从访问统计模块随机抽取一段时间进行统计是否超过阈值,如果缓存模块超过阈值,但是访问统计模块未超过阈值,则给出验证码进行验证,通过后可继续访问。如果给出验证码后并未得到处理,仍然进行请求,或者访问统计模块中也超过阈值认为是爬虫机器人将转到结果处理模块提供虚假数据。同时判断请求ip是否变化,如果ip在变可认为该爬虫机器人使用了代理ip,将此ip在访问统计模块中标记为代理ip。后来如果有代理ip过来访问随机次数给出验证码进行验证后方可访问;

子步骤e2如果单位时间内同一账户在缓存统计模块中访问超过阈值,则认为此账户存在爬虫机器人行为,再判断随机时间内访问统计模块中该账户访问是否超过阈值,如果缓存模块超过阈值,但访问统计模块未超过则给出验证码进行验证,通过后可继续访问。如果给出验证码后并未得到处理,仍然进行请求,或者访问统计模块中也超过阈值,则认为是爬虫机器人,将转到结果处理模块提供虚假数据。同时判断硬件编码信息是否一致,如不一致则认为有多台爬虫机器人使用同一账户进行爬虫行为,获取其硬件编号信息进行记录,标记为爬虫服务器;如果为同一硬件服务器发出请求,则随机的给出验证码进行验证后方可正常访问。

至此,本公开第一实施例服务器端的反爬虫验证方法介绍完毕。

在本公开的第二个示例性实施例中,提供了一种服务器端的反爬虫系统。图3为本公开第一实施例服务器端的反爬虫系统的结构示意图。如图3所示,本公开服务器端的反爬虫系统包括:函数模块、访问数据统计模块、缓存统计模块、爬虫服务器认定模块、代理ip识别模块、数据模拟模块、结果处理模块。

以下分别对本实施例服务器端的反爬虫系统的各个组成部分进行详细描述。

函数模块用于存储多个加密函数和算法,所述函数模块包括加密客户端请求时携带的数据,作为唯一识别标识供服务端统计;还包含各种服务端对客户端身份识别标识,以及供爬虫服务器模块和代理ip识别模块认定的函数。所述函数模块中包括多种加密算法库,并且根据不同的时间会往库里添加加密算法。

缓存统计模块用于把单位时间内访问的数据存入缓存模块,同时设置设置同一个缓存可访问服务端的过期时间为可调状态,最终通过函数模块中的统计模块将最终的统计结果存入访问统计模块,如采用redis。

访问统计模块用于统计随机时间内客户端请求服务端的所有数据,如:当前访问的账户、硬件信息识别(由cpu、显卡、硬盘、内存和mac地址通过函数模块中的加密函数计算得出)、当前访问ip,访问统计模块根据这三大因子进行统计。

爬虫服务器认定模块基于访问统计模块中的数据和函数模块中的函数进行统计后,识别爬虫服务器,并将此硬件信处计入访问统计模块。

代理ip识别模块基于访问统计模块中的数据和函数模块中的函数进行统计后,识别代理ip并将此ip进行标记。

数据模拟模块,用于在已经确认为爬虫时,存储服务器端数据模拟数据,供结果处理模块进行验证时使用;

结果处理模块,用于根据爬虫服务器认定给出处理方式,结果处理方式分为两种,如果单位时间内超过阈值的给出友好提示,但是随机时间内访问都超过阈值的直接认定是爬虫机器人,不给出验证码,而是将请求结果转到数据模拟模块中获取。

为了达到简要说明的目的,上述实施例1中任何可作相同应用的技术特征叙述皆并于此,无需再重复相同叙述。

至此,本公开第二实施例服务器端的反爬虫系统介绍完毕。

至此,已经结合附图对本公开实施例进行了详细描述。需要说明的是,在附图或说明书正文中,未绘示或描述的实现方式,均为所属技术领域中普通技术人员所知的形式,并未进行详细说明。此外,上述对各元件和方法的定义并不仅限于实施例中提到的各种具体结构、形状或方式,本领域普通技术人员可对其进行简单地更改或替换。

再者,单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。

此外,除非特别描述或必须依序发生的步骤,上述步骤的顺序并无限制于以上所列,且可根据所需设计而变化或重新安排。并且上述实施例可基于设计及可靠度的考虑,彼此混合搭配使用或与其他实施例混合搭配使用,即不同实施例中的技术特征可以自由组合形成更多的实施例。

在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本公开也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本公开的内容,并且上面对特定语言所做的描述是为了披露本公开的最佳实施方式。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。并且,在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。

类似地,应当理解,为了精简本公开并帮助理解各个公开方面中的一个或多个,在上面对本公开的示例性实施例的描述中,本公开的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本公开要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,公开方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本公开的单独实施例。

以上所述的具体实施例,对本公开的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本公开的具体实施例而已,并不用于限制本公开,凡在本公开的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1