想问一下,短信验证码一般有没有用后销毁的设计

2018-12-23 16:39:46 +08:00
 MonoLogueChi

事情是这样的,我刚才突然想起来我的网易云上还有两个对象储存的桶没有删除,就像去给删了,删除需要短信验证码。

因为是两个桶,我删除第一个桶,发送了短信验证码,使用第一个短信验证码删除第一个桶成功, 然后删第二个桶的时候,没有申请第二个验证码,直接把上一个验证码填了进去,删除第二个桶成功。

这个是短信验证码设计上的缺陷么,我知道阿里云的短信验证码也可以这样用,以前都是一个验证码在短时间内可以随便用。

那短信验证码的原理到底是什么啊,验证码有没有用后销毁这个设计啊,有用后销毁和没有用后销毁对验证码系统的影响大么

3993 次点击
所在节点    问与答
22 条回复
gy911201
2018-12-23 16:48:34 +08:00
短信验证码就是一个多因素验证,保证操作者是本人
一般情况下验证码会使用时间过期
一次使用后销毁对设计其实影响不大,但是需要考虑其他的因素
比如发送短信是有成本的,那么每次操作发送一条短信会有成本上的考虑
二是其实客户能收到的验证码数量也是有限的,国内很多平台一天给一个客户发送的短信数量都是有限制的,这个也是为了避免骚扰到客户等情况吧
MonoLogueChi
2018-12-23 16:56:00 +08:00
@gy911201 #1 不,他原本的设计是,我两个桶的删除,各需要一个申请一个验证码,但是因为我知道这个漏洞,所以第二个桶删除的时候并没有申请验证码。
换句话说,如果我不知道这个漏洞的话,第二个桶也会申请验证码的,这样节省成本和避免骚扰用户这一说法,根本解释不通
GLaDOSi
2018-12-23 17:16:25 +08:00
@gy911201 我有点好奇,短信验证码接收方在国外的话,发送方的单条资费会不会增加?
loading
2018-12-23 17:33:29 +08:00
@GLaDOSi 你看看你收到的 google 短信是什么发的。
GLaDOSi
2018-12-23 17:38:16 +08:00
@loading 号码是 22000
PureWhiteWu
2018-12-23 17:39:12 +08:00
这个应该是 bug,一般是用后销毁,只能使用一次的。
rogwan
2018-12-23 17:41:00 +08:00
一般验证码都是 5 到 10 分钟有效期,在这么短的时间内撞重,一般都不予以考虑了。当然也可以设计成一个操作一次验证,但是会给用户带来麻烦。所以 5 到 10 分钟有效是一个通行的兼具方便和安全带做法。
gy911201
2018-12-23 18:00:27 +08:00
@MonoLogueChi 这里基本上是业务和技术没有对齐
你可以理解为后端没有销毁验证码,也可以理解为前端没有判断是否应该触发发送验证码的操作……
怎么理解都能说得过去的
gy911201
2018-12-23 18:02:12 +08:00
@GLaDOSi 不同的短信通道资费不一样的,一般国外的平台费用会比国内贵一些
总体上来讲那种可以发向全球的短信平台提供商资费最贵,仅支持当地的运营商的价格会相对便宜点
msg7086
2018-12-23 18:13:08 +08:00
普通验证码的作用是防跨站和机器人。
短信验证码的作用是双因素认证。
用途不同,行为上也不同的,虽然看上去都是验证码。
你说的用后销毁的情况,在这里唯一有区别的是你删除了第一个桶以后手机掉了,然后你删第二个桶的时候是否应该被拒绝的问题。但是手机在这几分钟里掉了这事,实在是太小概率事件了。
swulling
2018-12-23 18:59:17 +08:00
你这个是因为他们程序员懒没有做验证失效的逻辑而已。

确实不做会非常简单,只需要验证时间令牌就行,前后端完全可以独立工作,如果做验证后失效就需要一个中心化的服务。
Les1ie
2018-12-23 21:57:21 +08:00
曾经给某安全公司的一个业务网站做 src 的时候发现了重置密码的验证码可以复用, 拿着一个手机验证码在一定的时间内可以无限次数的修改密码,然而交上去之后忽略了说这不是漏洞
结论:可能设计就是这样吧,毕竟我写的代码太少了也没啥经验 ,毕竟安全公司的开发经验肯定比我多 :)
huclengyue
2018-12-23 22:48:47 +08:00
@GLaDOSi 不会,国外会用国外的号码发短信
huclengyue
2018-12-23 22:50:47 +08:00
发短信是要成本的。你就算再让它发一条短信过来,验证码极有可能还是一样的
MonoLogueChi
2018-12-23 23:27:08 +08:00
@huclengyue 应该不会是一样的吧,再发一条请求应该是和没收到验证码是一样的吧
virusdefender
2018-12-23 23:29:30 +08:00
有可能是没有销毁,没生成新的导致没覆盖,是 bug

也有可能是类似两步验证那样,基于时间的,一段时间内的验证码都可以验证通过,微信就是这样的
koche
2018-12-23 23:42:38 +08:00
可能验证码实则用的是一次性密码,或者动态密码的机制,类似于银行 u 盾,一段时间内都是有效的
GLaDOSi
2018-12-24 02:09:52 +08:00
@gy911201
@huclengyue 感谢科普
chinvo
2018-12-24 02:19:16 +08:00
现在大部分短信验证码是 TOTP,也就是说在他设计的有效期内可以无限次使用。

当然不偷懒的话用 Counter-based HOTP 或者其他逻辑来生成就能避免重用了
xfspace
2018-12-24 07:49:33 +08:00
某省会的社保中心发验证码 24 还是 48 小时内多次有效,期间不二次发送🌚

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/520203

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX