v2简介

相信大家都碰到过下面的展示的 人机验证界面:

reCaptcha 是 Google 公司的验证码服务,方便快捷,改变了传统验证码需要输入n位失真字符的特点。

reCaptcha 在使用的时候是这样的:

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

而像文章开头两图,展示的是 reCAPTCHA v2 界面。下表显示了 reCAPTCHA v3 和 reCAPTCHA v2 中的特性的比较。

特色 reCAPTCHA v3 reCAPTCHA v2
费用 每月免费提供100万次调用* 每月免费提供100万次调用*
“我不是机器人”部件支持 无需
分数粒度(需要安全性审查) 4 levels

注:*每个组织免费提供100万次调用。该限制聚合了您所有帐户和所有站点的使用。

我们下面来说明一下人机验证 reCAPTCHA v3 的使用,它不需要用户去手动的验证了。

用户不用再选择哪些图里有飞机,哪些图里有汽车等。reCaptcha V3 会在后台对用户的行为进行监测,然后会返回一个分数(0-1)之间,我们就可以自定义了,小于 0.5 的就是机器人( 缺省情况下,阈值设置为0.5,可以在控制台设置为其他值),他们就需要被验证,验证手机号等。

v3申请密钥

1、先决条件

先要有一个google账户,然后再去reCaptcha官网申请网站为https://developers.google.com/recaptcha/

如果没有账户或打不开网站,请先解决先决条件

2、创建秘钥

打开 https://www.google.com/recaptcha/admin/create 页面,操作如下图:

域名:

您的注册范围仅限于您在此处输入的域名及其任何子域名。换句话说,如果您注册了 example.com,也就同时注册了 subdomain.example.com。有效域名必须具备主机,且不得包含任何路径、端口、查询或片段。

可以使用公网IP,和本地localhost,但不能用内网IP。

reCAPTCHA 类型:

选择适用于此网站密钥的 reCAPTCHA 类型。一个网站密钥只能与一种 reCAPTCHA 网站类型搭配使用。

 

点击提交后,我们就得到了 一个 API 密钥对 。密钥对由 站点密钥 和 密钥 组成。站点密钥用于在站点或移动应用程序上调用 reCAPTCHA 服务,而密钥授权应用程序后端与 reCAPTCHA 服务器之间的通信,以验证用户的响应。为了安全起见,密钥需要被妥善保管。

前端部署

国内使用reCAPTCHA只需要将 www.google.com 替换成 www.recaptcha.net,即可在国内使用 recaptcha 的服务。

如 https://www.google.com/recaptcha/api.js 替换成 https://www.recaptcha.net/recaptcha/api.js,https://www.google.com/recaptcha/api/siteverify 替换成 https://www.recaptcha.net/recaptcha/api/siteverify。

方式一、自动将请求绑定到按钮

1、加载JavaScript API

 <script src="https://www.google.com/recaptcha/api.js"></script>

2、添加一个回调函数来处理令牌

 <script>
function onSubmit(token) {
document.getElementById("demo-form").submit();
}
</script>

3、向 html 按钮添加属性

<button class="g-recaptcha"
data-sitekey="reCAPTCHA_site_key"
data-callback='onSubmit'
data-action='submit'>Submit</button>

方式二、以编程方式调用

为了大家方面理解,如上图,可以先看看我做的一个demorecaptcha

1、用 sitekey(站点秘钥) 加载 JavaScript API

<script src="https://www.google.com/recaptcha/api.js?render=reCAPTCHA_site_key"></script>

2、添加一个回调函数来处理令牌

 <script>
function onSubmit(token) {
document.getElementById("demo-form").submit();
}
</script>

3、在你需要进行人机验证的操作上调用 grecaptcha.execute 方法

reCAPTCHA v3 引入了一个新概念——动作如:( action: ‘submit / login’ )。当你在每一个执行 reCAPTCHA 的地方指定一个动作名称时,你启用了以下新特性:

1、管理控制台中前10个操作的详细数据分解

2、Adaptive risk analysis based on the context of the action, because abusive behavior can vary.

操作可能只包含字母数字字符、斜线和下划线。

   <script>
function onClick(e) {
e.preventDefault();
grecaptcha.ready(function() {
grecaptcha.execute('reCAPTCHA_site_key', {action: 'submit'}).then(function(token) {
// Add your logic to submit to your backend server here.
});
});
}
</script>
 

注意:

尝试将执行调用挂钩到有趣的动作,如注册、密码重置、购买或播放。

你可以使用ajax提交,也可以把 token 插入到 HTML 的 input hidden 隐藏框,一起提交到后端进行校验。

4、将令牌(token)立即发送到网站后端,并发送要验证的请求。

后端验证

后端交互检验( 如下面代码 ),得到结果,然后根据自己的需要来进行其他操作。

$token  = $_POST['token'];
$secret = '******';
$url = 'https://www.recaptcha.net/recaptcha/api/siteverify';
$data = array(
'response' => $token,
'secret' => $secret
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 3);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
$output = curl_exec($ch);
curl_close($ch);
echo $output;
 

得到结果如下:

{
"success": true,
"challenge_ts": "2022-04-21T08:39:01Z",
"hostname": "xushanxiang.com",
"score": 0.9,
"action": "submit"
}
说明:
{
"success": true|false, // 此请求是否为您站点的有效reCAPTCHA令牌
"score": number // 此请求的得分 (0.0 - 1.0)
"action": string // 此请求的操作名称(重要的验证)
"challenge_ts": timestamp, // 时间戳 (ISO format yyyy-MM-dd'T'HH:mm:ssZZ)
"hostname": string, // 站点的主机名
"error-codes": [...] // 其它
}

演示demo

文中已经提到过,为了方便验证,再放上这个demorecaptcha

人机验证reCAPTCHA v3使用完备说明的更多相关文章

  1. ASP.NET Core 使用 Google 验证码(reCAPTCHA v3)代替传统验证码

    写在前面 友情提示: Google reCAPTCHA(v3下同) 的使用不需要"梯子",但申请账号的时候需要! Google reCAPTCHA 的使用不需要"梯子&q ...

  2. 申请免费域名并配置DNS解析及CDN加速

    标题: 申请免费域名并配置DNS解析及CDN加速 作者: 梦幻之心星 sky-seeker@qq.com 标签: [#申请,#免费,#域名,#DNS解析,#CDN加速,#子域名] 目录: [网站] 日 ...

  3. 活动 Web 页面人机识别验证的探索与实践

    在电商行业,线上的营销活动特别多.在移动互联网时代,一般为了活动的快速上线和内容的即时更新,大部分的业务场景仍然通过 Web 页面来承载.但由于 Web 页面天生“环境透明”,相较于移动客户端页面在安 ...

  4. ReCAPTCHA & 手势验证

    手势验证 recaptcha https://www.vaptcha.com/ https://www.vaptcha.com/document https://www.iviewui.com/com ...

  5. ASP.NET Core 使用 Google 验证码(Google reCAPTCHA)

    关心最多的问题,不FQ能不能用,答案是能.Google官方提供额外的域名来提供服务,国内可以正常使用. 一. 前言 验证码在我们实际的生活场景中非常常见,可以防止恶意破解密码.刷票.论坛灌水.刷注册等 ...

  6. SSM-网站后台管理系统制作(3)---Google的reCaptcha验证码

    网上找了好久,也不知道怎么接入,后来看到一篇博客才搞好 reCaptcha官网:https://www.google.com/recaptcha/admin#site/344147946 参考博客:h ...

  7. 解决无法连接到 reCAPTCHA 服务

    今天ytkah在查询一个信息时需要人机验证,但提示“无法连接到 reCAPTCHA 服务”,通过修改host文件可以解决相关问题,用editplus或notepad打开C:\Windows\Syste ...

  8. 利用twilio进行手机短信验证

    首先要注册 twilio 账号但是由于twilio人机验证用的是Goole所有注册需要FQ 完成后去免费获取15元使用 然后 pip install twilio 注册完成后会在个人首页显示你的免费金 ...

  9. CCNA2.0笔记_OSPF v3

    OSPF v3 是可以在ipv6上实现路由的一种路由协议 OSPF v2(for IPv4),OSPF v3(for IPv6)在一台路由器中互相独立运行 OSPF v3与v2有很多类似的功能: - ...

随机推荐

  1. SQL 语言包括哪几部分?每部分都有哪些操作关键字?

    SQL 语言包括数据定义(DDL).数据操纵(DML),数据控制(DCL)和数据查询(DQL) 四个部分. 数据定义:Create Table,Alter Table,Drop Table, Crae ...

  2. 学习FastDfs(四)

    1.简介 FastDFS 是一个开源的高性能分布式文件系统(DFS). 它的主要功能包括:文件存储,文件同步和文件访问,以及高容量和负载平衡.主要解决了海量数据存储问题,特别适合以中小文件(建议范围: ...

  3. uniapp-npm install 进入版本后 优先运行全局安装,在HBuilder X终端输入 npm install 点击回车

    uniapp-npm  install 进入版本后 优先运行全局安装,在HBuilder X终端输入 npm  install 点击回车

  4. PokemonGo:LBS游戏开发

    写在前面 去吧!皮卡丘!小时候拥有一台任天堂是多少熊孩子的梦想,每个夜晚被窝里透出的微弱光线,把小小的童年带入另一个世界,家门口的鸟和狗,森林里的虫和瀑布,山洞里的超音蝠,带着小小的梦,走过一个个城市 ...

  5. web入门+书籍推荐

    如果你想建立一个自己的网站,你可以从网上搜到许多的教程:比如 wordpress gitpages 等等. 如果你想了解这个框架是怎么工作的,你可以了解以下下面的三个基本概念: 服务器, 数据库, 前 ...

  6. 基于mongodb的搜索分页

    mongodb模糊查询并分页 1.建立数据库 代码如下: var mongoose = require('mongoose'); var shortid = require('shortid'); v ...

  7. 前端面试题整理——HTML/CSS

    如何理解语义化: 对应的内容是用相应意思的标签,增加开发者和机器爬虫对代码的可读性. 块状元素和内联元素: 块状元素有:display:block/table:有div h1 h2 table ul  ...

  8. 我的python学习记_02

    流程控制 算术运算符: + 加(在字符串中拼接作用) - 减 * 乘 / 除 // 商 % 取余 ** 次幂 比较运算符: > 是否大于 >= 是否大于等于 < 是否小于 != 是否 ...

  9. 老版本的Spring应用该如何应对CVE-2022-22965漏洞?

    昨天,在发布了<Spring官宣承认网传大漏洞,并提供解决方案>之后.群里就有几个小伙伴问了这样的问题:我们的Spring版本比较老,该怎么办?这是一个好问题,所以DD今天单独拿出来说说. ...

  10. java栈stack和堆heap的工作原理,用途及区别?举例说明

    java堆和栈的区别[新手可忽略不影响继续学习] Java中内存分成两种:一种是栈stack,一种是堆heap.函数中的一些基本类型的变量(int, float)和对象的引用变量(reference) ...