recaptcha 是 google 为开发者提供的一种免费服务,它能够帮助开发者检测数据的发起者,进而防止某些自动化服务,也就是用于区分访问者是真人还是机器人。比如机器人评论,机器人登录网站,recaptcha 都能够帮助我们识别,进而方便我们有针对性的拦截。

reCAPTCHA v2

最常见的是这种勾选类型,这是属于 reCAPTCHA v2 版本,在一些网站登录和注册上比较常见。

为网站添加一个谷歌 recaptcha 验证服务

v2 虽然好用,但也有缺点,需要用户手动勾选才行,降低了用户体验。

于是google推出了 reCAPTCHA v3版本,主打 without user friction 和 score 机制。

without user friction 就是不打扰用户,用户几乎感觉不到它的存在,同时为用户打分(score ),判断是机器人(0分)还是真人(1分)。

如何注册

https://www.google.com/recaptcha/admin/create

为网站添加一个谷歌 recaptcha 验证服务

选择 v3 版本,输入域名就可以了比如 onesrc.cn (包括子域名)

下面的 Send alerts to owners 也可以勾选,错误数量超过一定程度会自动报警。

注册成功后会获得两个 key,site key 可以暴露给用户,但 secret key一定要保存好,不能泄露。

为网站添加一个谷歌 recaptcha 验证服务

如何使用

应用端(网页)

将下面的代码集成到网站中即可

<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。

安装成功后,网页右下角将会有一个小的图标。

为网站添加一个谷歌 recaptcha 验证服务

服务端

以评论为例,服务器端收到的数据除了评论数据之外,还包括了刚刚得到的 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/ 代替,后者也是官网。

主题授权提示:请在后台主题设置-主题授权-激活主题的正版授权,授权购买:RiTheme官网

声明:本站所有文章或资源,均来自互联网分享。本站不参与制作或存储,内容仅用于互联网爱好者学习和研究,如不慎侵犯了您的权利,请及时联系站长处理删除。敬请谅解!