当我们谈论验证码时,我们到底在谈论什么?

前言:

现如今登录用手机验证码登录是越来越常见了。虽然会增加成本,不过对用户体验的提升还是很有帮助的。那么,当产品经理对开发说,来按照这个原型给我搞个短信验证码登录的时候。我们作为研发,应该想些什么?


短信验证码登录

短信登录要做的事情

短信登录时序图

这里的图只展示了一次成功的流程。还有很多细节值得展开讲下。除了短信验证的流程以外,登录的安全性也必须要考虑到。尤其是比较重要的后台项目。
下面我就想图中17个步骤拆开分析

请求获取验证码(1~4)

1~4步主要的点有两个。

  1. 前端对手机号的格式验证,按钮多次点击的验证
    验证规则可以宽松一点。虽然前端的验证并不可靠,但是不代表前端的验证没有用。同时,当点击了获取验证码后需要将验证码的按钮禁用,防止多次点击
  2. 后端对请求验证码的频率的限制


    请求验证码频率限制

后端的部分则需要判断当前ip,当前手机号是否是重复请求验证码。这里就需要引入重复请求验证码的规则。一般的规则是60秒内可以再次请求。这个时间可以通过记录一条键名为请求手机号的一条缓存,过期时间为60秒。如果可以拿到值,则说明还没有到60秒再次请求。

验证合法性(5~8)

5~8步主要是验证手机号背后的用户的合法性
首先手机号的格式是必须要判断的,虽然前端有判断。但是后端的验证才是可靠的验证。后面就是通过手机号查库。查询的逻辑主要为

  1. 注册用户中是否有这个手机号
  2. 该用户状态是否为禁用
  3. 该用户权限是否可以登录当前业务


    验证合法性

如果条件满足就可以进行下一步了

制作/存储验证码(9~10)

制作验证码,就必须考虑两个问题,1是验证码的长度 2是验证码的复杂度
对用户最友好的当然是纯数字,验证码越短越好。但是这样对安全性就大打折扣。有没有又对用户友好,又安全的方案呢?
答案是有的。我们先按照4位数字的方案制作,安全性的解决方案,在验证的部分来分享

验证码制作

发送验证码给用户(11~12)

这步就比较简单了。只需要按照SMS的接口文档,传入手机号,短信模版,验证码就可以发送了。可以考虑增加一个日志记入数据库,用作数据分析。
但是还有一个容易被忽略的问题。那就是短信防刷,我们之前的设置,都只是针对于一个手机号的防刷。还有一种刷短信是不停的更换手机号来刷的那种。解决方案可以通过,ip,ua,referer,header等参数来判断是否是同一个客户端发起的请求。如果是同一个客户端在一个小时内请求超过了5次。就必须通过极验,或者输入图形码。这样的话可以最大限度的防止别人对我们的系统进行攻击,同时也保障了体验不打折扣

短信发送

验证登录,登录成功(15~17)

验证登录

上面提到我们选择使用4位数字的验证码,如果不设置尝试次数的限制的话,黑客使用多线程工具,在短时间内进行暴力请求,最多1万次就能穷举出所有的可能,而且运气也不一定会这么差。有可能在3000次的时候就试出来了。
那么我们的解决方案就是。同一个手机号,验证三次。就将验证码失效。在3次失败后,第四次请求,就返回错误文案 “验证码连续错误三次,请重新获取短信验证码”

还有一个需要思考的维度。那就是短信验证码的有效期。一般来说,短信验证码会有5分钟的有效期。这里就会有一个交叉的问题。比如一个用户获取到了一个验证码而不去验证,过了60秒又去获取一次。他就会有两个有效的验证码。这样明显是不合理的,那么我就需要在获取第二次验证码的时候废弃调第一个验证码。使用缓存存储验证码的时候,直接set就可以将上一个验证码给覆盖掉,还可以重新设置5分钟的有效期。

验证登录这步主要是要完成之前提到的。验证3失败3次废弃验证码(无论是否匹配),验证通过后也要废弃验该验证码。同时验证码通过之后还是需要再次验证用户的合法性。防止比较极端的情况,比如请求验证码的时候用户是合法的,但是在5分钟之内用户被禁用了。这样的话还是不能让他登录。
登录成功的话就看自己的架构设计了。可以是token令牌也可以是session会话。建立会话之后,就算完成了一次完整的短信验证码登录了!~

总结

短信验证码总结

总结完成之后,就可以按照要求进行开发了。虽然是一个简单的短信验证码,但是我发现市面很多的项目,这一块都没有做好(别问我,我怎么知道)我们作为研发人员,一定要尽可能的考虑周全,以免出现线上事故。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,530评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,403评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,120评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,770评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,758评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,649评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,021评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,675评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,931评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,751评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,410评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,004评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,969评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,042评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,493评论 2 343

推荐阅读更多精彩内容