绕过reCAPTCHA图片验证的方法

30

我正在我的网站上实现reCAPTCHA并且已经成功实现了。它能够正常工作。有时候,reCAPTCHA只需要点击"I'm not a Robot"就能完成验证,但有时它会显示图片网格来选择正确的图像以完成验证。

我在想是否可以禁用图片选择验证,使得reCAPTCHA只需要点击"I'm not a Robot"就能完成。Google展示图片网格的理论是什么呢?

我已经阅读了这篇文章:Prevent reCaptcha multiple image selections,但里面没有足够的信息。

谢谢!

下面我已经包含了recaptcha/api.js

<script src="https://www.google.com/recaptcha/api.js?onload=onloadCallbackAuto&render=explicit&hl=<?php echo $lang;?>" async defer >

我的reCAPTCHA代码如下:

    var onloadCallbackAuto = function() {
         /// do something....
    }
    var verifyCallback = function() {
         /// do something....
    }
    grecaptcha.render('gReCaptchaDiv', {
     'sitekey' : '<?php echo $siteKey;?>',
     'callback' : verifyCallback,
     'theme' : 'light'
    });

6
你能详细说明为什么你想要跳过图片选择挑战吗?因为听起来你想让机器人通过这个挑战,如果是这样的话,你不如直接禁用reCAPTCHA - 但如果你有其他原因,那么可能有其他方法可以解决你特定的问题。 - Lars Kristensen
3
可以添加一个复选框,只有在勾选复选框时才允许提交表单。目前你的需求没有意义。 - Stavm
我只是在检查是否可以跳过图像验证。让用户只需勾选“我不是机器人”复选框即可完成流程,这将更容易。如果不可能,我也没有任何问题。此外,我想知道谷歌何时以及如何决定显示图像验证。它并不总是显示图像网格。 - Aefits
较新的 API 是否有帮助?https://developers.google.com/recaptcha/docs/v3 - Ken Sharp
2个回答

58
新版Google reCaptcha采用了一些复杂的算法来判断是否为真实用户。其中使用的一些方法包括:检测请求的重复性(如果有一个请求在短时间内反复从同一特定来源发出),计时(自脚本初始化以来经过了多长时间),鼠标事件(如移动和点击),滚动事件,JavaScript常见事件触发和XHR调用。
所有这些方法以及许多其他方法都结合了隐形reCaptcha,在复选框reCaptcha的情况下,一些检测方法也会触发。如果算法检测到对于人类用户而言不寻常的事情,例如在没有触发mousemove事件的情况下单击reCaptcha复选框,则不会评估为人类结果,因此reCaptcha必须依靠其他方式来确保是人类进行操作而不是脚本机器人。
答案是你无法避免它。如果基本的reCaptcha方法失败,则必须采取某些措施来提供保护。
请记住,您的应用程序用户不像您那样经常看到图像方法。我猜您正在进行一些测试,并在更新代码后反复尝试相同的操作,因此由于来自同一来源的重复性,reCaptcha更容易失败。

1
感谢澄清。因为图像验证是reCAPTCHA功能的一部分,实际上进一步验证和确认它是人而不是机器人,所以我们无法绕过图像验证挑战。 - Aefits
2
@elegant-user 正是。绕过它没有意义,因为它首先弹出的原因。请记住,你反复执行相同的请求进行大量测试,所以应用程序的用户不太可能像你一样遇到这种图像挑战,因为最终用户不会这样做。 - Christos Lytras
2
你是正确的。我在我的应用程序上进行了许多测试,经常看到图像网格。 - Aefits
在开发过程中,这变成了一场噩梦。我在测试和修改等方面浪费了很多时间。我不能坐在这里花费5分钟来选择街道标志、公交车、汽车等。这让我疯狂。他们应该至少为测试目的提供一个绕过选项。这完全荒谬。 - emirhosseini
2
@emirhosseini 为什么不在开发阶段禁用它,然后在编写应用程序/代码完成后重新启用它呢?你知道它是有效的,在开发过程中启用它没有任何意义。如果您正在编辑实时应用程序,则应考虑使用带有源代码控制的开发环境。直接编辑生产应用程序/代码是不正确的。 - Christos Lytras
显示剩余2条评论

8
不,你不能跳过它。
我很惊讶没有人指出为什么我们要做这些。图像验证码不仅用于检测用户是否为机器人。如果您注意到,它们始终与交通、桥梁、标志、商店等相关。谷歌使用此工具来训练人工神经网络,主要用于自动驾驶汽车。这种方法称为监督式训练。
在神经网络中,有两种类型的训练:监督式和无监督式。监督式训练是当您提供手动评估网络性能的机制时。因此,当您选择所有那些汽车图片时,网络也在尝试做同样的事情,您基本上是对网络的表现进行评分。它获得的输入越多,它通过调整网络中每个神经元的权重变得更加智能。
在无监督式训练中,网络必须理解您正在尝试教授的内容,而没有外界帮助。这会效率低得多,但仍然可以做到。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接