当前位置: 首页 > 科技观察

短信验证码功能引发的思考总结

时间:2023-03-17 16:29:35 科技观察

探索简单功能背后的技术奥秘。科技在生活~故事昨天看到一个地址,新用户可以免费领取X灯都App14天会员。现在是2020年,是时候开始阅读了。看到笔记本上有这个活动,就用笔记本浏览器访问活动页面,输入手机号,接收验证码,填写验证码,接收会员。本以为一切就这样顺利结束了,其实不然。填写验证后提示“网络错误”。这是不科学的。作为一个程序员,我下意识的按下了F12,打开了开发者工具,于是看到了如下错误,如图:错误单独截图:简单点就是存在跨域问题。想了想,估计这个活动是针对移动端的,用PC端访问,导致跨域。这个地方设计得不好。于是我用手机访问了活动页面的地址,正常打开,然后填入手机号,然后提示:我刚刚从PC端发送了几次验证码,这个地方设计有考虑到安全性,这很好。我只能等待。从开发的角度来看,这意味着在固定的时间段内,我的手机号只能发送固定数量的验证码。如果超过这个数量,就不会再发给我了。一种是安全考虑(接口被频繁调用),另一种可能是成本考虑(防止短信验证码被刷)。过了一会儿,我去手机端尝试认领,发现一切顺利,认领成功。如果看到这里的小伙伴是新用户,也有兴趣阅读,那么就可以获得这个会员体验(不是广告)。地址:http://t.cn/AiFfyICx到这里应该就结束了,但是作为开发者,我觉得还是有必要简单梳理一下发短信这个功能,因为这个功能虽然看似简单,但是里面的东西很多它。需要注意和考虑的地方。短信验证码设计总结互联网时代,发送短信验证码已经成为很多产品中必不可少的功能。它也被用在很多场景中,比如注册登录、银行转账、营销活动等(场景真的很多,就不多举例了)。在发送验证时,其实很多公司都使用第三方短信服务。这个短信服务是需要收费的,天下没有免费的午餐。那么就会有一个刷短信的黑工具——短信轰炸器。SMSBomber是一款使用编写的程序来扫描大量短信的软件。可以自动批量提交手机号,模拟IP等扫描短信。如果需要使用短信验证码产品,一定要制定限制规则,设计好。主要原理:发送验证码需要前端和后端联合设计,这样才能更完美或者更完美。主要思路:1.再次发送前的时间限制是xx秒。一般操作中,点击验证后,前端(客户端)会进行xx秒的倒计时(这个倒计时可以根据具体的产品和服务来确定,很多是60s)。在此固定时间内,用户不能多次提交发送信息的请求。具体时限要考虑产品本身的属性、操作难度、网络延迟、短信资费成本等。2、图形验证码时限+时限(1)。当需要发送验证码时,让用户先输入验证码。输入验证码通过后,才可以请求短信验证码,否则不会激活获取验证按钮。.(2)请求验证后,一般会在前端(客户端)进行xx秒的倒计时(这个倒计时可以根据具体产品的具体业务来确定)。在此固定时间内,用户不能多次提交发送信息的请求。对此,图形验证码并不是必须的。或许是为了更好的用户体验,一开始不需要输入图形验证码,只有在操作到一定量后才需要输入图形验证码。请根据具体场景进行设计。这种方法虽然常用,但用处不大。技术好的人完全可以绕过这个限制,直接发送短信验证码。如果前台倒计时到60s,后台验证码的过期时间设计一定不能是60,一般是5到10分钟。3.手机号+指定时间可以发短信限制同一个手机号的发送次数,在指定时间内最多发送x条短信。当使用同一个手机号码进行注册或其他发送短信验证码的操作时,系统可以限制该手机号码。比如一个小时只能发送3个短信验证码。超过限制会报错(如:系统忙,请稍后再试)。但是,这只能避免手动刷短信。对于使用不同手机号批量刷短信的机器,这种方法也无能为力。4、IP和cookie限制限制相同IP/cookie信息的最大数量。使用cookies或IP可以很容易地识别出同一用户,进而限制同一用户(例如:xx时间内只能发送xx消息)。不过Cookies可以清除,IP可以模拟,IP在局域网内也会有相同的IP。因此,在使用该方法时,应根据具体情况进行思考。这样,在第三点的基础上,防止恶意刷手机验证码短信。如果同一个IP请求多条手机验证码短信,因为短信需要钱,竞争对手很可能会恶意刷卡。(我们对别人有好意,但心里要有准备。)5、短信预警机制,对短信服务进行监控,做好问题发生后的防护工作。以上方法不一定能完全防止短信被刷。良好的短信预警机制,即当短信使用量达到一定量或短信发送接口被调用次数过多时,向管理员发送预警信息,管理员可以立即进行监控和防护短信界面的情况。整理了相关资料后,我对今天上面出现的问题有了一些了解。手机端验证码正常验证成功,但PC端验证码无法验证的原因。可能是产品设计限制了恶意短信,限制了跨域请求。或者这可能是一个错误(不要让程序员承担责任)。后记一个看似简单的函数,简单也可以很简单,复杂也可以很复杂。作为技术人员,懂业务,懂使用场景,懂用户量等等,综合考虑,多终端时代,兼容性等等去考虑。其实这个问题如果你能仔细想一想,以后遇到了就可以综合考虑,而且开发人员总是说增删改查。功能设计能力。做好每一个小功能,从小地方提升用户体验,是产品和开发的共同职责。最后说两点,看到的小伙伴思考一下:1、后台应该怎么处理验证码,应该存放在哪里,内存,缓存,还是数据库?2、什么样的短信验证码用户体验好、内容好、验证码好?长度?