Google的Recaptcha V3-我应该跟踪分数,还是以“成功”为真?

noa*_*myg 5 recaptcha-v3

背景:我的网站非常简单,包含一个带有链接列表的首页(由3rd party服务提供)-每个链接都会弹出带有“提交”按钮的文件上传输入。在该弹出窗口中,我嵌入了Recaptcha脚本,并在提交文件时验证了令牌。由于存在多个弹出设置,因此我选择V3进行零用户与验证机制的交互。

现在,出现一个问题-我该如何解释Google对Google的回应。

Google文档第3版说:

reCAPTCHA通过查看您网站上的实际流量进行学习。因此,在暂存环境中或实施后不久的分数可能与生产环境有所不同。由于reCAPTCHA v3从未中断用户流程,因此您可以先运行reCAPTCHA而无需采取任何措施,然后通过在管理控制台中查看流量来确定阈值。默认情况下,您可以使用0.5的阈值。

从我的描述中,我很清楚score,最重要的是-最可能的机器人为0.0,最可能的机器人为1.0。所以在我的代码中,我检查success == truescore >= 0.5

但是- 我在网上找到的用于服务器端验证的V3示例中,没有一个与分数有关。这是其中的3个 这三个仅检查请求是否成功:

/sf/answers/3788267451/

/sf/answers/3684365821/

https://dzone.com/articles/adding-google-recaptcha-v3-to-your-laravel-app

最后,我的问题是-是对V3机制的误解,还是我错过了一些东西?

谢谢。

小智 16

是的,您绝对应该检查 Google 验证响应中“分数”的值。

这三个例子非常缺乏细节,实际上非常混乱。

“成功”仅意味着您使用正确的令牌和秘密发送了一个格式良好的请求。

听起来您已经在检查“分数”的值,这很好,但我只是想为发现此问题但仍然有点困惑的任何人澄清这一点。


pas*_*rby 5

为了补充@BrettM的答案......

这取决于处理验证的方式。

使用reCAPTCHA PHP 客户端库

请参阅代码行ReCaptcha::verify() 第 180-182 行

  • 设置阈值时:
    $recaptcha = new Recaptcha($secret);
    $response = $recaptcha
            ->setExpectedHostname($hostname)
            ->setExpectedAction($action)
            ->setScoreThreshold(.5)
            ->verify($token, $ip);
    
    Run Code Online (Sandbox Code Playgroud) $response->isSuccess()false当未达到阈值时将返回。
    $response->getErrors()将包含E_SCORE_THRESHOLD_NOT_MET
  • 不设置阈值:
    $response->isSuccess()将返回true,除非有错误。
    $response->getScore()现在应该进行检查。

不使用 reCAPTCHA PHP 客户端库:

$response['success'] 和 $response['score'] 都应该被检查。