问题描述
简要摘要
让我们首先简要介绍一下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如何,验证均成功。我检查了一些主题,似乎这是一个常见问题:
- Google reCAPTCHA's remoteip parameter is ignored
- Is there any reason to include the remote ip when using reCaptcha?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)