谷歌人机验证接入实践篇

前端比划

共 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/


浏览 187
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报