如何检测Captcha服务器场并阻止Captcha机器人

问题描述

简要摘要

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

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

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

问题

我的网站已与Google reCaptcha V2 (Invisible reCaptcha)完全集成。该实现遵循文档中列出的所有步骤。到现在为止,它一直是一种魅力。随着时间的流逝,我们经历了各种试图渗透到我们登录中的攻击。造成最大问题的一个原因是字典攻击与自动Google reCaptcha解决机制相结合。攻击者正在使用可解决Google reCaptcha的场(或可能是脚本),并生成唯一的响应代码,这些代码被bot网络(世界各地的不同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如何,验证均成功。我检查了一些主题,似乎这是一个常见问题:

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)