胖蒜

分享有价值的资源

国内如何稳定使用reCaptcha验证码

TePass插件,引入了Google reCaptcha 验证码,但是这个插件的用户基本都是国内的,那么怎样才能保证使用的稳定,是值得考虑的问题。

reCaptcha_v2.gif

只需要点一下复选框,Google会收集一些鼠标轨迹、网络信息、浏览器信息等等,依靠后端的神经网络判断是机器还是人,绝大多数验证会一键通过,无需像传统验证码一样。个人感觉比Geetest要好一些。

但是reCaptcha使用了google.com的域名,这个域名在国内是被墙的,如果使用可以用Nginx配置反向代理,本文的教程无需自行配置,我们直接使用Google官方的反向代理

Google reCaptcha 秘钥获取:

1)登陆你的Google账户,没有的话是用不了的。
2)在这里来申请一对key https://www.google.com/recaptcha/admin,国内怎么联网申请就要自己想办法了,我没有办法。
3)登录进去后,会有一个reCAPTCHA类型的选择,根据自己需要选择V2还是v3的版本,接着下面有个添加域名,填写你申请的秘钥需要用在什么地方的网站域名。
4)申请成功后可以看到两个key,一个是Site key,可以公开,一个是你自己的Secret key。
5)一个账户可以申请很多key的,也可以删除掉。

客户端和服务端部署:

获取到了两个key之后,google那个网页可以关闭了,下面开始在客户端和服务端进行配置。
因为国内无法访问Google,所以下面将 www.google.com 都换成 www.recaptcha.net ,这样国内就可以稳定使用了。
1)客户端部署代码:
在你要添加reCaptcha的页面添加script标签:

<script src='//www.recaptcha.net/recaptcha/api.js'></script>

接着在你要显示reCaptcha验证框的地方添加div容器:

<div class="g-recaptcha" data-sitekey="【此处添加你的site-key】"></div>

这样就完成了客户端的部署。

2)服务端部署代码:
服务端只需要将客户端点击验证码后传回的g-recaptcha-response值和ip以及secret传给Google的API:https://www.recaptcha.net/recaptcha/api/siteverify 即可。

$secretKey = "你的reCaptcha秘钥";
$recaptcha_response = $_POST["g-recaptcha-response"];
$recaptcha_json_result = file_get_contents("https://www.recaptcha.net/recaptcha/api/siteverify?secret=".$secretKey."&response=".$recaptcha_response);
$resp = json_decode($recaptcha_json_result);

将这个g-recaptcha值通过post方式发送到 https://www.recaptcha.net/recaptcha/api/siteverify 将获得一个json格式结果,在v2的版本验证结果是否为true即可,v3版本返回参数有个分数,你可以设定大于多少判定为人。

本文属原创,转载请注明原文:https://pangsuan.com/p/reCaptcha_in_China.html

感觉很棒,欢迎点赞 OR 打赏~

分享到:

评论 (0)

立即登录评论
马上咨询 在线工单