谷歌人机验证接入实践篇
前端比划
共 1878字,需浏览 4分钟
·
2021-03-09 19:45
先前文章简单介绍过谷歌人机验证的流程,今天直接把实现代码与实现过程中的几点思考同步说明一下, 以供参考。
在服务端判断是否需要人机验证,判断逻辑主要基于以下几个规则:
1分钟内同一IP请求超过5次,或同一帐号请求超过5次
3分钟内请求超过8次(同一IP或同一帐号)
帐号登录地点发生变化时(国家、城市),直接启用人机验证
触发人机验证后,30分钟内都启用人机验证
人机验证通过且账号密码都正确时,下次登录请求不需要人机验证,然后循环以上判断。
网页端的代码参考实现:
指定元素盒模型,避免文字超出边界
.g_recaptcha_wrapper {
* {
box-sizing: border-box;
}
}
初始化验证控件时,指定过期、错误回调,重新刷新控件;校验未勾选通过时,禁用按钮提交。
var g_logSignData = {
grecaptchaDisableLogin: false,
grecaptchaWidget: null,
grecaptchaToken: null,
disableSubmitBtn: function () {
g_logSignData.grecaptchaDisableLogin = true;
g_logSignData.grecaptchaToken = null;
//禁止提交
$("#js_signInBtn").addClass('validate-disabled');
},
enableSubmitBtn: function () {
g_logSignData.grecaptchaDisableLogin = false;
g_logSignData.grecaptchaToken = grecaptcha.getResponse(g_logSignData.grecaptchaWidget);
$("#js_signInBtn").removeClass('validate-disabled');
},
recaptchaOnloadCadllback: function () {
g_logSignData.disableSubmitBtn();
if(g_logSignData.grecaptchaWidget !== null) {
grecaptcha.reset(g_logSignData.grecaptchaWidget);
return;
}
g_logSignData.grecaptchaWidget = grecaptcha.render(document.querySelector('.g_recaptcha_wrapper'), {
sitekey: 'xxxxxxxxxxxxxxxxxxxxxxxxxx',
'callback': function () {
g_logSignData.enableSubmitBtn();
},
'expired-callback': function () {
g_logSignData.disableSubmitBtn();
},
'error-callback': function () {
g_logSignData.disableSubmitBtn();
}
});
}
};
......
如果使用gmail邮箱,可以轻易拥有无限个子邮箱。比如注册邮箱是xxx@gmail.com。以下两种方式都可以接收到邮件,在用户名中任意位置插入“.”字符或在用户名后指定+和其他字符,比如x.x.x@gmail.com、
xxx+zhihu@gmail.com。通过谷歌邮箱的这个特性,在支持的网站上,我们就可以用同一邮箱来区分注册,或实现一个邮箱注册多个账号。
检测邮箱泄漏:
https://haveibeenpwned.com/
网站流量统计、分析
https://www.similarweb.com/zh/
评论