3

简要总结

让我们先简单介绍一下 Google reCaptcha 农场是什么——机器人开发人员可以通过 API 查询以自动解决 Google reCaptcha 的服务:

  • 机器人被验证码挑战阻止。
  • 它使用网站的验证码公钥及其域名作为参数对验证码农场进行 API 调用。
  • Captcha 农场要求其中一名工人解决 Captcha。
  • 大约 30-45 秒后,验证码被解析,您将获得其响应令牌。
  • 机器人通过提交响应令牌来解决验证码。

简而言之,解决验证码就像在机器人代码中调用函数一样简单。攻击者甚至不需要通过点击直接与 Google reCaptcha 进行交互。如果攻击者知道 Google reCaptcha 回调的结构和 URL,即网站在提交成功响应后发送 Google reCaptcha 响应令牌的请求(通过查看 devtools 很简单),他们可以证明他们'已经解决了验证码,甚至没有使用真正的浏览器。

问题

我的网站与Google reCaptcha V2 (Invisible reCaptcha)完全集成。实施遵循文档中列出的所有步骤。到目前为止,它就像一个魅力。随着时间的推移,我们经历了不同类型的试图渗透我们登录的攻击。造成最大问题的一个是字典攻击与自动 Google reCaptcha 解决机制相结合。攻击者正在使用解决 Google reCaptcha 并生成唯一响应代码的农场(或可能是脚本),这些代码被机器人网络(世界各地的不同 IP 地址、用户代理、浏览器指纹等)使用。使用这些代码,Google reCaptcha 被排除在外,我们必须使用不同的机制来阻止攻击者。

问题

我多次查看 Google reCaptcha 文档以及与此问题相关的不同主题,但找不到一种简单的方法来防止此类攻击。我有几个问题,如果有人成功回答,我将不胜感激:

  • 是否可以将 Google reCaptcha 响应代码绑定到代码质询、cookie 或类似的东西,以确保代码由确切的客户端生成?
  • 有什么方法可以区分来自农场/脚本的 Google reCaptcha 代码和由确切客户端生成的代码?
  • 我发现有一些像DataDome这样的解决方案,非常昂贵。是否有类似但价格较低的东西或可以自己实现的算法?

提前非常感谢!

脚本

以下是类似于 Google reCaptcha 农场的脚本的简化:

bypassReCaptcha();

function bypassReCaptcha() {
    grecaptcha.render(createPlaceholder(), buildConfiguration());
    grecaptcha.execute();
}

function createPlaceholder() {
    document.body.innerHTML += '<div class="g-recaptcha-hacker"></div>';
    return document.getElementsByClassName('g-recaptcha-hacker')[0];
}

function buildConfiguration() {
    return {
        size: 'invisible',
        badge: 'bottomleft',
        sitekey: '<your site-key>',
        callback: (reCaptchaResponse) => localStorage.setItem('reCaptchaResponse', reCaptchaResponse)
    };
}

我正在使用服务器端验证 - 像这样:

curl -X POST 'https://www.google.com/recaptcha/api/siteverify?secret=<your secret>&response=<generated code from above>&remoteip=<client IP address>'

似乎该remoteip参数没有按预期工作 - 无论客户端 IP 是什么,验证都是成功的。我检查了一些主题,似乎这是一个常见问题:

4

0 回答 0