网站首页 > 技术文章 正文
本文深度剖析了关于短信验证码的运作机制,破解验证码A和短信验证码A‘原理,以及短信验证码未加防护存在的风险和对于短信验证码出现的一些问题应该如何处理。
一、短信验证码运作机制
1. 验证码加密发送
- 在APP中点击发送验证码,向后台发送一个发送验证码请求;
- 后台收到请求,生成一个验证码A,并反编译成短信验证码A‘;
- 请求短信服务商发送短信验证码A’至用户手机,同时存储验证码A至后台数据库中;
注:出于安全性考虑,后台数据库只能查看验证码A,无法查看短信验证码A‘。
2. 验证码解密验证
- 用户收到短信验证码A’,填写至APP中,点击注册,向后台发送验证验证码请求并提交短信验证码;
- 后台收到请求后后反编译短信验证码A‘,验证反编译之后的结果是否是验证码A,是则验证码成功,此次用户注册申请成功,否则验证失败,反馈给APP,此次注册申请不成功。
产品经理只需要理解成为——“我们有一个密件,你用我短信传给你的暗号打开密件,然后把里面的东西交给我,我就把你要的东西给你”。
二、破解验证码A、短信验证码A‘原理
在这样的一个机制下,而且需要验证码不过于复杂,会出现两种比较常见的对用户账户的安全性造成威胁的情况:
(1)暴力破解短信验证码A’
假设短信验证码A’只有四位,暴力破解只需要模拟调取接口10000次就能够把短信验证码A‘破解出来。假设调取一次接口耗时0.1秒,那么1000秒就能够成功破解验证码A’,即只有短短的1000/60=16.67分钟。
(2)暴力破解验证码A
截取数据库的数据包拿到验证码A,对验证码A执行暴力破解,反推出短信验证码A‘,相比直接暴力破解短信验证码A’,时间会有点长,但可以减少验证次数。
三、短信验证码未加防护存在的风险
当黑客发现某个未加防护的短信发送接口后,按照某个手机号码列表,循环发送短信验证码,不断变换ip地址,如果我们没有做任何限制的话,会存在两个方面的风险:
- 公司可能损失数以万计甚至更高的短信费用,发送验证码是需要向运营商付费,如果发出的短信大多数都是没有用的话,用户注册量越大资金支出越大,将让公司在这一块遭受不必要的损失;
- 流量攻击,用户无法登陆、注册;大批量的请求发送验证码,会导致访问流量大增,有可能使得发送验证码的数据接口瘫痪,用户无法继续使用该功能(造成用户无法登陆、注册),必定会收到用户的投诉,公司形象也会受损。
四、应对策略
为了防止黑客恶意刷取目标网站短信验证码,使用对短信发送次数、短信发送时间间隔进行限制以及发送之前增加动态验证。
(1)手机号获取短信验证码次数限制是其中一种防攻击策略,不过在设计这方面内容时,需要根据自己公司的业务情况具体制定的。
需要回答3个问题:
- 根据业务需要,短信验证码发送次数设置的上限为多少合适?单次短信验证码填写错误的次数?
- 一般超过这个上限,我们需要锁定用户手机号多长时间?6小时,12小时,还是24小时?
- 锁定用户手机号后,我们可以为用户提供的后续方案是什么?需不需要提示对方,让他打电话给客服,自己主动申请解锁?走邮箱的验证方式、增加语音验证码也是一种可行的解决方案。
(2)设置短信发送时间间隔是其中的一种防攻击策略,为了防止用户重复获取验证码,一般设置60s左右的间隔获取时间,但验证码的有效期一般是5-30分钟不等。一般来说,5分钟有效的都是4位验证码,30分钟有效的都是6位验证码。不过这方面手段不能防止黑客更换手机号进行攻击,防护等级较低。
(3)发送验证码之前需要填写一次验证码,不过此种传统的方式利用机器学习的知识很容易破解。另外可以增加滑块拼图这种需要人为干预的动态验证。
至于如何研究这一块,各位可以看一下各大手机银行的APP,他们的安全防护措施都非常强大,无论是登录还是注册还是找回密码都有极高的安全性。
本文由 @ 码农 原创发布于人人都是产品经理。未经许可,禁止转载
题图来自 Pixabay,基于 CC0 协议
猜你喜欢
- 2024-10-26 最近别来杭州!怕你不想回去了……
- 2024-10-26 为什么有人不用免费的WPS,偏要花钱用Office?看完这些就知道了
- 2024-10-26 还在苦恼验证码怎么实现?看看这个验证码组件合集,你想要的都有
- 2024-10-26 时间浪费在哪儿?(时间浪费四种情形)
- 2024-10-26 qq账号被冻结了怎么快速解冻手机号换了
- 2024-10-26 RPA实战:“滑动”验证码与按照“语序”点击两类验证码
- 2024-10-26 产品心理学:给予用户理解和宽容(产品的心理功能有( )( )( ))
- 2024-10-26 OPPO Reno4 Pro忘记OPPO帐号密码怎么办?
- 2024-10-26 你知道新买的手机,怎样重新登录微信账号吗?
- 2024-10-26 才发现,一个手机号可以注册2个微信了,操作简单,一看就能学会
- 11-26Win7\8\10下一条cmd命令可查得笔记本电脑连接过的Wifi密码
- 11-26一文搞懂MySQL行锁、表锁、间隙锁详解
- 11-26电脑的wifi密码忘记了?一招教你如何找回密码,简单明了,快收藏
- 11-26代码解决忘记密码问题 教你用CMD命令查看所有连接过的WIFI密码
- 11-26CMD命令提示符能干嘛?这些功能你都知道吗?
- 11-26性能测试之慢sql分析
- 11-26论渗透信息收集的重要性
- 11-26如何查看电脑连接过的所有WiFi密码
- 最近发表
- 标签列表
-
- cmd/c (57)
- c++中::是什么意思 (57)
- sqlset (59)
- ps可以打开pdf格式吗 (58)
- phprequire_once (61)
- localstorage.removeitem (74)
- routermode (59)
- vector线程安全吗 (70)
- & (66)
- java (73)
- org.redisson (64)
- log.warn (60)
- cannotinstantiatethetype (62)
- js数组插入 (83)
- resttemplateokhttp (59)
- gormwherein (64)
- linux删除一个文件夹 (65)
- mac安装java (72)
- reader.onload (61)
- outofmemoryerror是什么意思 (64)
- flask文件上传 (63)
- eacces (67)
- 查看mysql是否启动 (70)
- java是值传递还是引用传递 (58)
- 无效的列索引 (74)