审核专家:郑远攀
郑州轻工业大学教授
我们上网冲浪,经常会遇到类似下图所示的人机验证流程,需要点选一下其中的方框才能访问网页内容。
reCHAPTCHA 人机验证对话框 来源丨wiki
上述操作流程是为了保护网站安全而设置的验证,毕竟网站的注册、登录、领券、投票等应用场景都存在被机器(程序脚本)刷数据进而而造成各类损失的风险。
但是点一下就知道访问网站的“主体”是不是真人(human being)?这么草率的验证方式真的能区分真人和机器吗?
1
点选验证码的原理
首先让我们来在谷歌浏览器Chrome开发者工具窗口中看看上图所在的部分网站信息。按下键盘上的F12功能键,打开如下图所示的开发者工具窗口之Network Panel(网络面板),点击人机身份验证的按钮,可以看见左侧的网络传输数据包。
网站Chrome开发者工具窗口之Network Panel(网络面板) 来源丨google
也许你还看不懂这些内容的含义,不过没关系,只需要把这些东西看作是本地浏览器发给远程网站服务器的一些数据;这些数据不是给人看的,而是给服务器看的。
服务器通过分析这些“乱码”里的信息可以判断其是一个真人产生的数据还是单纯由自动化程序代码发出的请求数据包,进而可以区分出操作的主体是人还是机器。
Python语言编写的抢课脚本代码 来源丨Bilibili
你以为你只是“开玩笑”一样点选了一下屏幕窗口中的小方块,然后“就进入了后面的网页,但实际上你的操作会生成数据包并被发送到服务器端。
比如当人点击验证码时,其实是发送了一大包加密的数据。被加密的数据大概有以下几种:
>>>>1.用户行为数据:页面停顿时间、点击按钮、鼠标轨迹等;
>>>>2.环境变量:用户设备信息、网络信息、操作系统信息等;
>>>>3.浏览器指纹:包括请求头(headers)信息,ip地址(网卡逻辑地址)信息,MAC地址(网卡物理地址)信息,地理位置信息,cookie信息等。