指纹2

浏览器指纹技术概要
浏览器指纹是关于给定的浏览器、设备、操作系统和用户的环境和位置信息的一组信息。[2]这些信息可以直接通过JavaScript搜集并发送给网站服务器。网络爬虫无法避开这些信息的发送,如果爬虫直接复制了浏览器的相关指纹参数,那么网站主机就可以根据指纹来确定流量是否来自同一用户,进一步根据发送频率来限制流量。而且,浏览器指纹也可以获取跨浏览器指纹,主要是操作系统信息和一些图形卡信息,因此同一台主机发起的请求完全可以被识别为同一用户。而这种技术的好处在于无法感知,因为这些信息可以直接通过编程语言的接口来获取,不会留下任何痕迹。

一些常用的指纹主要包括如下几个方面:

设备的功能(包括设备内存、颜色深度、逻辑核心、触控支持、屏幕参数等);
操作系统的参数(操作系统版本、支持的字体列表、时区等);
浏览器的特征(浏览器头部版本、插件列表、屏幕分辨率、数据库信息等);
图形卡信息(canvas画布、WebGL渲染器等)。
获取上述信息之后,通常不会把这些信息直接发送出去,而是对其进行哈希编码。哈希是指从一个可变大小的输入中获得一个固定长度的输出的过程。相同的输入会有相同的输出,而且哈希函数拥有不错的抗碰撞能力,即两个不同的输入很难获得相同的输出结果。利用这一特性,可以很轻易地辨别较长的浏览器指纹是否是来自同一用户。

如果要辨别流量是否来自于同一浏览器,只需要把浏览器对应的信息搜集后哈希,然后放置于cookie或者一个单独的参数中,发送给网站主机即可。这样一来,网站面对来自同一指纹的频繁请求,可以及时进行流量拦截。

如果爬虫程序伪造了不同的浏览器头部信息,网站也可以进一步搜集图形卡信息和操作系统参数,因为同一台电脑的这些信息是相同的,这样即便开启多个浏览器或者伪造不同的浏览器头部也可以轻易被识别出来。

四、浏览器指纹技术的缺陷
浏览器指纹技术也存在限制,主要在于用户的设备是可以更新和升级的,一旦进行更新和升级,指纹将发生很大变化。而且如果爬虫程序识别到了浏览器指纹识别技术,也可以通过编写JavaScript,完全伪造一套指纹环境,并且不断随机其中的参数,从而达到生成新指纹的效果。这样一来,网站针对同一指纹的请求频率来识别的方案将会失效。

但是不论如何,浏览器指纹依然是目前抵制网络爬虫最坚实的方案。因为浏览器指纹信息是极其繁杂的,网站的浏览器指纹检测方案可以不断改进,并搭配JavaScript参数加密和混淆,进而可以极大增加破解难度。如下图所示的浏览器本身的信息:

这些信息都直接包含在浏览器的window当中。浏览器指纹技术不仅可以检测各类信息,也可以侦测用户请求网站的时候,是否存在这些函数方法。这样一来,除非爬虫程序完全将浏览器的接口自己实现,进行繁重的补环境操作,否则也没有什么爬取数据的捷径可行。

posted @ 2024-04-27 22:35  浪里白条_双河  阅读(6)  评论(0编辑  收藏  举报