在国内使用Google验证码reCaptcha
如今各大网站都不可缺少的一部分就是验证码,验证码具有防止恶意批量操作,保护账户安全等作用。但是现在各种暴力破解验证码的手段层出不穷,验证码的保护也就失去了意义。所以各大平台为了应对这种情况也是使用类似滑动拼图(京东、哔哩哔哩等)看图识物(12306)等各种办法,但是国内的验证码平台大多是收费的,那有没有即是免费的,验证效果又好认可度较高的验证码平台呢?这就是今天的主角了reCaptcha了。
reCaptcha最初由CMU设计,具体做为将OCR软件无法识别的文字扫描图传递给世界各大网站,用以替换原本的图片验证码,网站用户正确识别出文字之后,便会将结果传回CMU。后来Google接手了这个项目,也就形成了Google reCaptcha,废话不多说直接介绍如何在国内使用Google reCaptcha。
一、账号注册
首先需要去Google reCaptcha注册账号(https://www.google.com/recaptcha)需要梯子,这一步其实就是登录你的Google账号,如果没有的话请自行百度
二、验证码配置
打开上方网址之后,点击Admin Console,进入到控制台,如果之前有配置过的话控制台会显示一段时间内验证码的使用次数。如果之前没有配置过,则会让你创建

下方的图片就是没有配置过的情形:

Label是你为当前站点所创建的名称
reCAPTCHA type为当前所使用的验证码版本,这里我们使用reCAPTCHA v2版本,并勾选"I'm not a robot" Checkbox,这样你就得到了一个最常见的Google reCaptcha
Domains为当前验证码可用网域,reCaptcha只有在你写好的域名下才可以使用,不需要写入完整域名,比如可以写:baidu.com, jd.com,在此域名下的所有次级地址均可使用
Owners为当前站点的管理员,如果有需要可以添加其他人的Google账号
将上述内容填写完成后就可以点击提交了,提成之后会得到如下的信息:

其中Site Key是前端用来请求验证码所使用,需要将此key值放到前端
Secret Key是后端用来跟Google服务器通信校时所使用的
三、站点集成
当上述工作都准备完成之后,就可以开始进行站点集成了。首先来说前端部分:
a. 引用reCaptcha的js文件到前端,国内搭建了一个镜像站点来解决js文件访问不到的问题,请将下段代码复制到index.html中去:
<script src="https://www.recaptcha.net/recaptcha/api.js?render=explicit" async defer></script>
async和defer是为了避免加载js时间过长导致页面空白不动,毕竟验证码是为了页面而服务的
b. 加载完成之后就需要写加载验证码的逻辑了
<!--验证码的显示区域-->
<div id="captcha" style="margin: 10px"></div>
<script>
//验证码加载方法
handleLoadGoogleCaptcha() {
this.codeFlag = false;
let env = this;
env.captchaId = grecaptcha.render("captcha", {
//在Google reCaptcha网站获取的Site Key
"sitekey": env.config.siteKey,
//主题
"theme": "light",
//验证成功后的回调函数
"callback": env.handleCaptchaCallback,
//验证码超时后的回调函数
"expired-callback": env.handleCaptchaExpired,
//验证失败时的回调函数
"error-callback": env.handleCaptchaError,
//默认语言 默认是英语,简体中文写zh-CN 如果有其他需要请自行搜索
"hl": this.$i18n.locale
});
},
handleCaptchaCallback(val) {
if (val != null) {
this.register.captchaCode = val;
this.codeFlag = true;
}
},
handleCaptchaExpired() {
this.register.captchaCode = "";
this.codeFlag = false;
},
handleCaptchaError() {
this.register.captchaCode = "";
//重置验证码
grecaptcha.reset(this.captchaId);
this.codeFlag = false;
},
</script>
c. 验证结果,当完成上述配置之后验证码应就会出现了,如下图:

至此前端部分的配置就算完成了,更多详细细节可以查看官方的配置指导手册,接下来讲后端部分:
后端部分的配置就简单的多了只需要去发送一个请求验证结果就可以了,直接上代码
//国内镜像站点URL
String TOKEN_RESTRICTIONS_URL = "https://www.recaptcha.net/recaptcha/api/siteverify";
public static boolean verify(String secret, String token) {
log.info("verify({},{})",secret,token);
RequestBody body = new FormBody.Builder()
//secret 就是在Google reCaptcha控制台获取到的secret key
.add("secret",secret)
//token是前端验证码验证通过后返回的结果
.add("response",token)
.build();
Request request = new Request.Builder()
.url(TOKEN_RESTRICTIONS_URL)
.post(body)
.build();
try (Response response = client.newCall(request).execute()) {
String result = response.body().string();
log.info("google response:{}", result);
ApiResponse apiResponse = JsonUtils.fromJson(result, ApiResponse.class);
return apiResponse.getSuccess();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
验证通过之后整体流程才算完成,具体可以查看开发指导手册
四、总结
此篇使用的Google reCaptcha中比较常见的复选框形式,另外还有几种其他形式这里就不过多介绍了,如有需要可以去自行搜索,使用方法与本文介绍的方法基本一致。
在国内使用Google验证码reCaptcha的更多相关文章
- ASP.NET Core 使用 Google 验证码(Google reCAPTCHA)
关心最多的问题,不FQ能不能用,答案是能.Google官方提供额外的域名来提供服务,国内可以正常使用. 一. 前言 验证码在我们实际的生活场景中非常常见,可以防止恶意破解密码.刷票.论坛灌水.刷注册等 ...
- ASP.NET Core 使用 Google 验证码(reCAPTCHA v3)代替传统验证码
写在前面 友情提示: Google reCAPTCHA(v3下同) 的使用不需要"梯子",但申请账号的时候需要! Google reCAPTCHA 的使用不需要"梯子&q ...
- SSM-网站后台管理系统制作(3)---Google的reCaptcha验证码
网上找了好久,也不知道怎么接入,后来看到一篇博客才搞好 reCaptcha官网:https://www.google.com/recaptcha/admin#site/344147946 参考博客:h ...
- 阿里云香港B区通过IPV6规避Google验证码
最近买了阿里云香港B来FQ,然而被Google的验证码折磨的死去活来.四处查询,终于找到了一个合适的方案. 添加IPV6支持 阿里云香港是没有IPV6地址的,需要一个tunnel,这边使用HE.NET ...
- 如何在国内使用google
而Google却一直坚持“机器算法”至上,让信息以公正的排序结果呈现,对于IT人员来说国内不能用google进行搜索是很痛苦的. 公司邮件介绍了一些方法,mark一下还是很有用的. http://ww ...
- 国内使用google地图的初级使用
<!DOCTYPE html><html><head><title>Simple Map</title><meta name=&quo ...
- 国内使用Google Maps JavaScript API
<!DOCTYPE html> <html> <head> <meta name="viewport" content="ini ...
- 谷歌地图,国内使用Google Maps JavaScript API,国外业务
目前还是得墙 <!DOCTYPE html> <html> <head> <meta name="viewport" content=&q ...
- 国内访问Google的方法(Google学术、Google香港、Twitter等)
通过修改host文件达到访问Google等国外网址的目的 打开下面网址,里面会定期更新host文件,而且有详细的方法 https://laod.cn/hosts/2017-google-hosts.h ...
随机推荐
- xss利用——BeEF#stage3(绕过同源策略与浏览器代理)
绕过同源策略 正式进入攻击阶段.因为SOP(同源策略)的存在,BeEF只能对被勾子钩住的页面所在域进行操作.如果有办法绕过SOP,那么无疑会使攻击面放大. 绕过SOP可从两方面入手.第一个是从浏览器本 ...
- python下的appium控制andriod按键
今天查看视频的时候,发现不好控制关闭视频,于是就想控制手机的返回按键来达到返回的效果. 找到了一些关于按键的keycode,如下: KEYCODE_CALL 拨号键 5 KEYCODE_ENDCALL ...
- 在Python中使用OpenCV(CV2)对图像进行边缘检测
转载:https://blog.csdn.net/cumtb2002/article/details/107798767 Modules used: 使用的模块: For this, we will ...
- Java基础系列-SPI你认识吗
原创文章,转载请标注出处:https://www.cnblogs.com/V1haoge/p/10755313.html 一.SPI是什么 SPI是相对API而言的. API指的是应用对服务调用方提供 ...
- GML与KML的区别
1.GML是基于XML的地理信息的传输.存储编码,它包括空间的和非空间的地理特征和地理范畴.GML是空 间数据编码.传输.存储.发布的国际标准KML是一个OGC标准 2.GML专注于地理信息的结构与内 ...
- 多测师讲解python_安装001.1
Python+pycharm 一.Python安装 python现在主要就是python2和python3,目前python3最新是3.8,考虑稳定性我们用3.6,3.7等 第一步:下载Python安 ...
- MeteoInfoLab脚本示例:天气现象符号
天气现象符号分布图实际就是散点图,可以用scatterm函数绘制,但之前需要创建天气符号图例,用weatherspec函数.如果只需要绘制某些天气现象(比如雾.霾),可以给出相应的天气符号序号列表(可 ...
- MeteoInfoLab脚本示例:地图投影
在用axesm函数创建地图坐标系的时候可以指定地图投影(设置projinfo参数),地图投影可以通过projinfo函数来创建,里面的参数依据proj4投影字符串,可以参考此网页:http://rem ...
- spring-boot-route(十八)spring-boot-adtuator监控应用
Spring Boot提供了良好的服务监控模块,只需要通过简单的配置便可以完成服务监控和管理.但是服务监控这块内容往往是最容易被忽略的一块内容,今天我们一起来学习一下使用spring-boot-act ...
- spring boot:单文件上传/多文件上传/表单中多个文件域上传(spring boot 2.3.2)
一,表单中有多个文件域时如何实现说明和文件的对应? 1,说明和文件对应 文件上传页面中,如果有多个文件域又有多个相对应的文件说明时, 文件和说明如何对应? 我们在表单中给对应的file变量和text变 ...