recaptcha 是 google 为开发者提供的一种免费服务,它能够帮助开发者检测数据的发起者,进而防止某些自动化服务,也就是用于区分访问者是真人还是机器人。比如机器人评论,机器人登录网站,recaptcha 都能够帮助我们识别,进而方便我们有针对性的拦截。
reCAPTCHA v2
最常见的是这种勾选类型,这是属于 reCAPTCHA v2 版本,在一些网站登录和注册上比较常见。
v2 虽然好用,但也有缺点,需要用户手动勾选才行,降低了用户体验。
于是google推出了 reCAPTCHA v3版本,主打 without user friction 和 score 机制。
without user friction 就是不打扰用户,用户几乎感觉不到它的存在,同时为用户打分(score ),判断是机器人(0分)还是真人(1分)。
如何注册
https://www.google.com/recaptcha/admin/create
选择 v3 版本,输入域名就可以了比如 onesrc.cn
(包括子域名)
下面的 Send alerts to owners 也可以勾选,错误数量超过一定程度会自动报警。
注册成功后会获得两个 key,site key 可以暴露给用户,但 secret key一定要保存好,不能泄露。
如何使用
应用端(网页)
将下面的代码集成到网站中即可
<script src="https://recaptcha.net/recaptcha/api.js?render=_reCAPTCHA_site_key"></script>
<script>
grecaptcha.ready(function() {
grecaptcha.execute('_reCAPTCHA_site_key_', {action: 'homepage'}).then(function(token) {
console.log(token)
});
});
</script>
_reCAPTCHA_site_key_
需要替换成前面获得的 site key 。
如果用于评论系统,action 中的 homepage 可以替换为 social ;如果用于登录,可以替换为 login。
在获得 token 后,需要把 token 发送给你自己的服务器,评论或登陆发送数据时一定要带上这个 token。
安装成功后,网页右下角将会有一个小的图标。
服务端
以评论为例,服务器端收到的数据除了评论数据之外,还包括了刚刚得到的 token。
然后就需要服务端发起 http 请求,根据 token 查询评论操作是用户发起还是机器人发起。
GET https://recaptcha.net/recaptcha/api/siteverify?secret=_reCAPTCHA_secret_key&response=_reCAPTCHA_token
_reCAPTCHA_secret_key
为 secret key,_reCAPTCHA_token
为服务端收到的token。
响应如下
{
"success":true,//是否为机器人
"challenge_ts":"2020-03-15T10:11:03Z",//时间戳
"hostname":"127.0.0.1",//域名
"score":0.9,//得分
"action":"social"//action类型
}
success 为判断结果,我们可以使用该参数判断是真人还是用户。
score 是得分在 0 到 1 之间,1 为真人,0 为机器人。也可以自己规定一个分界线,使用该项判断。
php示例如下:
(没学过php,自己随便写的,但是能用)
$url = "https://recaptcha.net/recaptcha/api/siteverify?secret=" . $secret_key . "&response=" . $token;
$result = json_decode(file_get_contents($url, false, stream_context_create(array('https' => array('method' => "GET", 'timeout' => 3)))), true);
if (!($result && $result['success'])) {
$error = "未通过 recaptcha 验证";
}
结语
recaptcha 免费又好用,typecho 博客之前有一阵机器人轰炸式评论,用了一段时间,很有效。
文档中的域名是 https://www.google.com/recaptcha/xxx
,鉴于访问不了,可以使用 https://recaptcha.net/recaptcha/
代替,后者也是官网。
评论(0)