一个短信验证码功能引发的总结思考[通俗易懂]

从简单的功能探寻背后的技术。文章目录故事短信验证码设计总结1、时间限制2、图形验证码限制 + 时间限制3、手机号+指定时间可以发短信次数限制4、IP及Cookie限制5、短信预警机制后记故事昨天看到一个地址,新用户免费领取X登读书APP的14天会员,2020年了,要开始读书了。看到这个活动是在笔记本上,于是用笔记本浏览器访问活动页面,输入手机号,收到验证码,填写验证码,领取这个会员。本…

大家好,又见面了,我是全栈君。

从简单的功能探寻背后的技术。

一个短信验证码功能引发的总结思考[通俗易懂]

故事

昨天看到一个地址,新用户免费领取X登读书APP的14天会员,2020年了,要开始读书了。看到这个活动是在笔记本上,于是用笔记本浏览器访问活动页面,输入手机号,收到验证码,填写验证码,领取这个会员。本来以为一切就是这样顺利的结束了,然而并不是,填写验证就提示“网络错误”。这不科学啊,作为程序员,我下意识的按了一下F12,打开了开发者工具,于是看到了下面的错误,如图:

image.png

将错误单独截图出来:

image.png

简单一点就是出现了跨域的问题。我想了一下,那估计这个活动是针对移动端的,我用PC端访问导致出现跨域。这个地方设计不好。

于是用手机去访问活动页地址,正常打开,然后填写手机号,然后提示:

image.png

我刚才PC发了几次验证码,这个地方设计还是考虑到安全性了,不错。

我只能等待,在开发角度,这个就是在一个固定的时间周期内,我的手机号只能发固定次数的验证码,超过这个数量,就不会给我在发了,一个是安全考虑,另一个可能也是费用考虑( 防止短信验证码被刷 )。

过了一段时间,我在去手机端试着领取,发现一切顺利,领取成功。

看到这里的伙伴如果是新用户,也对读书有点兴趣,那可以领取这个会员体验一下。地址:http://t.cn/AiFfyICx

到这里本该就结束了,但是作为一个开发人员,我觉得要简单整理一下这个发短息的功能,因为这个功能虽然看似简单,里面深究起来也有很多地方需要注意以及考虑的。

短信验证码设计总结

互联网的时代,发送短信验证码已经作为很多产品中必不可少的一个功能。用于的场景也是很多,如注册登录、银行转账、营销活动等(真的有很多场景,我就不多举例了)。

那在发送验证的时候,其实很多公司用的都是第三方的短信服务,这个短信的服务是需要收费的,天下没有免费的午餐。那么就出现 刷短信的黑工具——短信轰炸机

短信轰炸机就是一个利用写好的程序来大批量刷短信的软件,它能够通过自动批量提交手机号、模拟IP等方式去刷短信。

如果 需要用到短信验证码的产品的时候,一定要制定限制规则 ,做好设计。

主要原则:发送验证码是前端和后台是需要共同设计的,这样相对才能更加完善或者更加完美。
主要思路:

1、时间限制

xx秒后才能再次发送

一般点击验证后,在前端(客户端)会进行一个xx秒的倒数(这个倒计时可以根据具体产品具体业务定,很多是60s)。在这固定的时间内,用户是无法提交多次发送信息的请求的。

具体时效限制要考虑产品本身属性,操作难易度,网络延迟,短信资费成本等。

2、图形验证码限制 + 时间限制

(1)、在需要发送验证的码的时候,先让用户输入验证码,当输入的验证码通过后,才能请求获取短信验证码,否则获取验证按钮不激活。
(2)、在请求获取验证后,一般在前端(客户端)会进行一个xx秒的倒数(这个倒计时可以根据具体产品具体业务定)。在这固定的时间内,用户是无法提交多次发送信息的请求的。

这一点,图形验证码不一定是必须的。可能为了有更好的用户体验,一开始不需要输入图形验证码,在操作达到一定量之后,才需要输入图形验证码。具体情况请根据具体场景来进行设计。

这种方法虽然使用得比较普遍,但是却不是非常有用,技术稍微好点的人完全可以绕过这个限制,直接发送短信验证码。
如果前台倒计时60s,后台验证码的失效时间设计肯定不能是60,一般会是5~10分钟。

3、手机号+指定时间可以发短信次数限制

同一个手机号,指定时间之内不能够超过x条。

对使用同一个手机号码进行注册或者其他发送短信验证码的操作的时候,系统可以对这个手机号码进行限制,例如,24小时只能发送5条短信验证码,超出限制则进行报错(如:系统繁忙,请稍后再试)。然而,这也只能够避免人工手动刷短信而已,对于批量使用不同手机号码来刷短信的机器,这种方法也是无可奈何的。

4、IP及Cookie限制

限制相同的IP/Cookie信息最大数量

使用Cookie或者IP,能够简单识别同一个用户,然后对相同的用户进行限制(如:xx时间内最多只能够发送xx条短信)。然而,Cookie能够清理、IP能够模拟,而且IP还会出现局域网相同IP的情况,因此,在使用此方法的时候,应该根据具体情况来思考。

这样在第三点的基础上防止恶意刷手机验证码短信,如果同一个ip多次请求获取手机验证码短信,因为短信需要钱,竞争对手很可能恶意刷去。(我们对他人心怀善意,但是内心要有防备之心)

5、短信预警机制

监控短信服务,做好出问题之后的防护

以上的方法并不一定能够完全杜绝短信被刷,因此,我们也应该做好短信的预警机制,即当短信的使用量达到一定量之后,向管理员发送预警信息,管理员可以立刻对短信的接口情况进行监控和防护。

当我整理了相关的资料后,稍微明白了今天上文出现的问题,移动端验证码正常验证,而PC端不能进行验证的原因。可能是产品设计上的限制恶意刷短信,做了跨域请求限制。 也或许这就是一个bug。

后记

一个看似简单的功能,要简单做可以很简单,要复杂也可以很复杂,作为一个技术人员,了解业务,了解使用场景,了解用户量等,全面考虑,多端的时代,兼容性等也要考虑。

其实这个问题如果可以仔细想清楚的话,如果以后遇到就能够全面考虑,并且开发人员总是说自己做增删查改,这个的功能设计好,里面涉及了增删查改,更涉及了一个开发对功能的设计能力。

做好每一个小的功能,从小的地方提升用户体验,是产品和开发共同的责任。

最后在说两点,看到的朋友思考下:

1、后台应该如何处理验证码,保存在什么地方,内存,缓存,还是数据库?

2、怎么样的短信验证码用户体验好,内容和验证码长度?

欢迎留言,一起探讨交流~

手机验证码很重要,请不要泄露给陌生人~

彩蛋

Java编程技术乐园:一个分享编程知识,用技术的角度看世界。跟着老司机一起学习干货技术知识,每天进步一点点,让小的积累,带来大的改变!

image.png | center| 747x519


欢迎扫描关注,有【秘籍】,献上~

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/120984.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • WPF/Silverlight QQ交流群:137377438

    WPF/Silverlight QQ交流群:137377438WPF/SilverlightQQ交流群:137377438目前只有可怜的几个人,首先申明,我是Silverlight新手,正在不断的学习中,欢迎有共同爱好的朋友一起加入!转载于:https://www.cnblogs.com/Caceolod/archive/2011/10/09/2203267.html…

    2022年7月17日
    15
  • 本地mysql文件浏览器_可视化数据库浏览器(SQLite Database Browser)

    本地mysql文件浏览器_可视化数据库浏览器(SQLite Database Browser)SQLiteDatabaseBrowser可以管理所有iphone数据,基于Qt库开发,主要是为非技术用户创建、修改和编辑SQLite数据库的工具,使用向导方式实现。用来处理SQLite3数据库文件的应用程序,它能够打开sqlite3数据库文件(常见的文件扩展名为.db,.db3,.s3db;只要文件是SQLite3数据库文件,其扩展名不规范也不要紧)。SQLiteDatabas…

    2022年9月9日
    0
  • nacos eruka_nacos和eureka比较哪个好

    nacos eruka_nacos和eureka比较哪个好nacos

    2022年8月21日
    4
  • Nginx中fastcgi_pass的配置问题[通俗易懂]

    Nginx中fastcgi_pass的配置问题[通俗易懂]Nginx和PHP-FPM的进程间通信有两种方式,一种是TCP,一种是UNIXDomainSocket.其中TCP是IP加端口,可以跨服务器.而UNIXDomainSocket不经过网络,只能用于Nginx跟PHP-FPM都在同一服务器的场景.用哪种取决于你的PHP-FPM配置:方式1:php…

    2022年7月11日
    22
  • Idea激活码最新教程2023.3版本,永久有效激活码,亲测可用,记得收藏

    Idea激活码最新教程2023.3版本,永久有效激活码,亲测可用,记得收藏Idea 激活码教程永久有效 2023 3 激活码教程 Windows 版永久激活 持续更新 Idea 激活码 2023 3 成功激活

    2025年5月27日
    0
  • 2019年总结-做时间的朋友

    2019年总结-做时间的朋友插曲:抽风了,使用在线网页的markdown写2019年的总结,都快写完了,然后手欠点击了总结里贴的一个链接地址,页面毫不留情的跳转了。当我返回到写总结的页面时,发现写好的内容不见了,这是一种什么心情,我太南了~心情顿时不那么好了。重新理一下心情和思绪,简单整几句总结吧。2020年第一天,吃过晚饭,在电脑桌前,打开网易云音乐,播放了收藏的轻音乐,开始写下这些文…

    2022年2月28日
    39

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号