什么是验证码?
CAPTCHA代表完全自动化的公共图灵测试,以告诉计算机和人类的一部分。如果您不知道图灵测试的含义,那么,缩写词也解释了这一点。这是一项测试,以确定您正在交互的实体是计算机还是人类。换句话说,如果你想在 Tinder 上勾搭的那个女孩真的是一个人,或者只是一个精心设计的聊天机器人,它会试图推销昂贵的网络摄像头网站。
验证码的目的是什么?
验证码测试的主要目的是过滤来自机器人的人流量(是的,网络爬取工具就是机器人)。他们通过向网站访问者提出各种挑战来做到这一点。这些挑战被设计为人类可以轻松解决,但计算机却很难破解。验证码允许网站管理员遏制不受欢迎的自动化活动,例如垃圾邮件、DDoS 攻击,有时还包括网络爬取。
验证码还有次要目的。最初,它们帮助将光学内容识别 (OCR) 技术无法破解的扫描不良的文本段落数字化。如今,我们通过标记图像中的对象为谷歌的机器学习算法提供免费劳动力。谈论崇高的事业。
验证码如何工作?
验证码作为最终测试来确定网站的访问者是人类还是机器人。当网站检测到异常流量时,它们就会出现;然后他们向访客提出一个挑战。
验证码的具体配置取决于网站管理员:它可以保护整个网站或特定页面。有时,页面总是会出现验证码,尤其是注册、评论表单或结账页面。但更多时候,它需要某种触发因素才能出现。
是什么触发了验证码机制?
引起验证码的主要因素有:
- 简单的验证码触发器。其中包括异常流量、来自单个 IP 地址的大量连接或使用低质量的数据中心 IP。例如,VPN 用户比普通网站访问者看到更多的验证码,因为 VPN 从数据中心获取 IP。对于在许多员工之间共享 IP 地址的企业网络也是如此。
- 被动指纹识别。用于评估您的网络和设备的参数集合。最重要的是 HTTP 标头、用户代理、TLS 和 TCP/IP 数据。
- 主动指纹识别。这是一种更复杂的技术,可以通过 JavaScript 嗅出有关硬件和软件的高级信息。它研究 WebGL 参数、字体、插件等。
这些触发器不必涉及验证码 – 它们可以简单地完全阻止访问者浏览网站。当指纹识别或其他保护方法无法最终证明访问者是非人类时,它们就会被组合起来。以下是您可以预期的组合及其频率:
组合 | 频率 |
简单触发+验证码 | 最常见的 |
被动指纹+验证码 | 常见的 |
主动指纹+验证码 | 比较少见 |
简单触发+被动+主动指纹+验证码 | 稀有的 |
正如您所看到的,许多网站不会费心实施复杂的指纹检查。这是因为这样做需要大量资源,而且还会损害用户体验。例如,Cloudflare 使用主动指纹识别来触发验证码,我相信很多人都不会因为被“检查浏览器”屏幕不断打断而感到兴奋。
一旦触发验证码,它就会向访问者提出一个挑战。
验证码挑战的主要类型
验证码挑战有许多不同类型,很难在这里列出所有类型。相反,让我们将它们分为您最有可能遇到的几个大类:
文本输入验证码
这种类型呈现一串扭曲的字母和数字。要通过挑战,您必须将它们重新输入到文本字段中。
基于文本的验证码可能是最古老的类型,由原始验证码引入。此后它们已经不再受欢迎,因为文本很容易被机器人操纵,而人类很难输入。然而,它们仍然被网络论坛甚至亚马逊等网站广泛使用。
图片验证码
图像挑战的一个典型示例是 reCAPTCHA 的图像网格,您必须在其中选择包含某些对象的方块。如果你成功了,你就可以过去;如果你成功了,你就可以过去;如果你成功了,你就可以过去。否则,你会得到另一个网格或测试失败。
图像验证码非常流行,您可能最常遇到它们。基于图像的挑战有多种变体,例如定义对象的边界或按类别标记您所看到的内容。
音频验证码
这些挑战会提供音频摘录,然后要求输入您听到的字母、单词或数字。
音频验证码很少单独出现。相反,它们是针对可访问性有限的用户的其他类型挑战的后备选项。为了增加语音识别软件的难度,音频测试有时会增加声音的失真度。
拼图验证码
这种类型的验证码包括数学问题(加法、减法和其他运算)、文字谜题、空间任务和类似的测试。
例如,一种名为 fun CAPTCHA 的流行验证码系统经常要求网站访问者滚动一个内部有 3D 模型的球。另一个验证码系统 Geetest 要求您移动一块来完成拼图。谜题验证码依靠运动和类似的机制来避免机器学习模型非常擅长解决的识别任务。
按钮验证码
这种类型也称为 noCAPTCHA,因为它要求访问者单击复选框而不是向他们提出挑战。因此,如果一切顺利,普通用户无需执行任何其他操作即可通过。如果验证失败,则会出现常规挑战(通常是图像)。
按钮验证码广泛应用于 Google 的 reCAPTCHA 和 hCAPTCHA(互联网上最流行的两个系统)。它减少了解决挑战的摩擦,并且在阻止机器人方面非常有效。该系统使用行为线索来监控访客如何勾选复选框;我们在下面的 reCAPTCHA v2 下简要描述它们。
隐形验证码
看不见的验证码甚至不会给你一个复选框来勾选——事实上,普通人根本不应该看到它。它完全在后台运行,系统监视访客并决定是否向他们提出挑战。
隐形验证码是 Google 倡导的最新技术进步。他们的目标是减少人们的不便。然而,这种验证码因使用侵入性和侵犯隐私的技术来过滤机器人流量而受到批评。
社交媒体登录
社交媒体登录要求新用户使用其社交媒体帐户进行注册,然后才能查看内容或使用服务。
虽然不完全是严格意义上的验证码,但社交媒体标志也用于过滤来自机器人的人流量。它们非常有效,因为仅仅填写虚假信息是不够的——您还需要拥有一个虚假的社交媒体帐户。因此,您突然必须处理两个网站而不是一个,而社交平台对于自动化工具来说并不是一件容易解决的难题。
最流行的验证码系统
以下是互联网上一些较为流行的验证码系统:
reCAPTCHA v2
oogle 自己的验证码解决方案。它于 2013 年发布,此后取代了该公司基于文本的 reCAPTCHA v1。尽管已经有了第三个版本,但第二版仍然是网站管理员非常流行的工具。
reCAPTCHA v2 因“无验证码 reCAPTCHA”而闻名。那是因为它给出了一个简单的“你是机器人吗?” 复选标记框而不是挑战。运动鞋黄牛称该框为“一键验证码”。它减少了每次解决验证码的麻烦。
是什么导致验证失败或成功?Google 会考虑用户的 cookie 历史记录、鼠标移动和其他行为数据。如果这些参数丢失或不匹配,则可能会触发验证码质询。由于依赖 cookie,v2 因向非 Chrome 用户提供更多挑战而臭名昭著。
2017 年,谷歌推出了隐形 reCAPTCHA。它的工作方式与常规 v2 类似,但您可以将其绑定为在任何按钮单击时触发,而不是单击特殊框。
reCAPTCHA v3
Google 于 2017 年发布了 reCAPTCHA 的第三个版本。与 v2 不同,v3 并未取代其前身,版本 2 和版本 3 都可以作为替代选项。
v3 被设计为无需任何交互即可工作。它对用户来说是不可见的,并在后台持续监视他们的操作。根据它们,它为用户分配一个分数——他们是机器人的可能性有多大。如果分数较低,reCAPTCHA v3 允许网站管理员选择要采取的操作:提出 v2 质询、限制请求数量、阻止用户或让他们通过。
为了评估访问者,reCAPTCHA v3 使用先进的主动指纹识别方法,通过 JavaScript 窥探信息。
hCAPTCHA
hCAPTCHA 的工作方式与 Google 的工具非常相似。与 reCAPTCHA 一样,它分析行为模式以确定用户是人类还是机器人。如果检查失败,用户会收到质询。最常见的是图像,但 hCAPTCHA 使用一种有趣的机制,其中挑战类型取决于最高出价者。
hCAPTCHA 相对较新 – 它于 2018 年才推出,作为 reCAPTCHA 的答案。由于注重隐私且对大多数网站免费,hCAPTCHA 迅速在网络上传播。2020 年 4 月,它成为Cloudflare 的首选提供商,如今 hCAPTCHA 可能是网络上最广泛使用的验证码系统。
Amazon CAPTCHA
亚马逊自己的验证码系统在规模上无法与前三个选项相比。但这家零售巨头是主要的网络爬取目标,所以我们就在这里。
与谷歌已经转向其他方法不同,亚马逊仍然使用基于文本的挑战。很难确定到底是什么触发了它,这对许多人来说使得爬取亚马逊变得相当不可预测。Amazon 验证码的另一个问题是您并不总是知道何时收到验证码。无论是否验证码,您仍然会收到 200 状态代码。因此,如果您的爬取工作进展得令人怀疑,请不要太兴奋。
亚马逊一直在尝试其他实施方案,因此尚不清楚基于文本的挑战将持续多久。但现在,他们就在这里,你必须对付他们。
如何绕过验证码
如果您的网络爬取工具遇到验证码,您的第一个办法应该是轮换您的 IP 地址。这常常出人意料地有帮助,特别是当您使用优质代理网络时。
否则,有两种绕过验证码的主要方法:您可以尝试解决挑战或完全避免它。
解决挑战
解决挑战意味着直面它。这假设验证码是不可避免的,或者您的网络爬取设置不够复杂,无法欺骗网站的保护机制。
最简单(且技术含量相对较低)的方法是获得验证码解决服务。 2Captcha 和 Anti-CAPTCHA 等网站使用真人来为您解决挑战;您只需输入其哈希值并通过 API 接收解决方案。以这种方式处理验证码的成本为每 1,000 个挑战 1-3 美元。
至于更高级的方法:
- 基于文本的挑战可以通过机器学习来克服。您可以下载包含文本的图像,对它们进行分段,然后训练神经网络来识别字母。这需要时间,但可以完全解决问题。
- 基于图像的挑战有多种解决方案。您可以找到或训练卷积神经网络来识别图像。另外,几乎所有基于图像的验证码都具有针对残疾人的辅助功能模式。它不是解决图像问题,而是允许下载音频文件并使用任何在线(免费)语音转文本 API 进行处理。请注意,谷歌已经加强了其主动指纹识别算法,因此您可能并不总能获得音频选项。
避免挑战
当然,理想的结果是完全避免验证码。这比简单地暴力破解它们更难实现,但通常更有价值。我们建议尝试以下方法:
- 使用优质 IP 地址。IP 识别通常是网站使用的第一道防线。有了良好且“干净”的住宅 IP 地址,您遇到验证码的可能性就会降低。
- 限制您提出的请求数量。您不应该用来自同一 IP 的大量请求来攻击网站。更改请求之间的持续时间,设置有机超时。不要刮得太快或整天不停地刮。
- 改进网络爬取工具的指纹。爬取时尽量保持有机:匹配 TLS 参数、HTTP 标头、拥有真实用户代理的数据库、在不再需要 cookie 时丢弃它们。
- 模仿人类行为。如果该网站受到特别好的保护,您可以尝试浏览其页面、单击链接以及模仿鼠标移动。您可能还想使用无头浏览器。像 Puppeteer 这样的无头库可以完全渲染 JavaScript,并包含其他有用的功能来帮助伪装您的网络爬取工具。
结 论
现在你知道了什么是验证码,它们的主要类型以及一些绕过它们的方法。请注意,并不是每个验证码都相同 – 它们的触发条件和难度取决于网站的安全性和您的操作。记住这一点,祝您在网页爬取方面好运!