事情是这样的,我刚才突然想起来我的网易云上还有两个对象储存的桶没有删除,就像去给删了,删除需要短信验证码。
因为是两个桶,我删除第一个桶,发送了短信验证码,使用第一个短信验证码删除第一个桶成功, 然后删第二个桶的时候,没有申请第二个验证码,直接把上一个验证码填了进去,删除第二个桶成功。
这个是短信验证码设计上的缺陷么,我知道阿里云的短信验证码也可以这样用,以前都是一个验证码在短时间内可以随便用。
那短信验证码的原理到底是什么啊,验证码有没有用后销毁这个设计啊,有用后销毁和没有用后销毁对验证码系统的影响大么
1
gy911201 2018-12-23 16:48:34 +08:00
短信验证码就是一个多因素验证,保证操作者是本人
一般情况下验证码会使用时间过期 一次使用后销毁对设计其实影响不大,但是需要考虑其他的因素 比如发送短信是有成本的,那么每次操作发送一条短信会有成本上的考虑 二是其实客户能收到的验证码数量也是有限的,国内很多平台一天给一个客户发送的短信数量都是有限制的,这个也是为了避免骚扰到客户等情况吧 |
2
MonoLogueChi OP @gy911201 #1 不,他原本的设计是,我两个桶的删除,各需要一个申请一个验证码,但是因为我知道这个漏洞,所以第二个桶删除的时候并没有申请验证码。
换句话说,如果我不知道这个漏洞的话,第二个桶也会申请验证码的,这样节省成本和避免骚扰用户这一说法,根本解释不通 |
6
PureWhiteWu 2018-12-23 17:39:12 +08:00
这个应该是 bug,一般是用后销毁,只能使用一次的。
|
7
rogwan 2018-12-23 17:41:00 +08:00 via iPhone
一般验证码都是 5 到 10 分钟有效期,在这么短的时间内撞重,一般都不予以考虑了。当然也可以设计成一个操作一次验证,但是会给用户带来麻烦。所以 5 到 10 分钟有效是一个通行的兼具方便和安全带做法。
|
8
gy911201 2018-12-23 18:00:27 +08:00
|
9
gy911201 2018-12-23 18:02:12 +08:00
@GLaDOSi 不同的短信通道资费不一样的,一般国外的平台费用会比国内贵一些
总体上来讲那种可以发向全球的短信平台提供商资费最贵,仅支持当地的运营商的价格会相对便宜点 |
10
msg7086 2018-12-23 18:13:08 +08:00
普通验证码的作用是防跨站和机器人。
短信验证码的作用是双因素认证。 用途不同,行为上也不同的,虽然看上去都是验证码。 你说的用后销毁的情况,在这里唯一有区别的是你删除了第一个桶以后手机掉了,然后你删第二个桶的时候是否应该被拒绝的问题。但是手机在这几分钟里掉了这事,实在是太小概率事件了。 |
11
swulling 2018-12-23 18:59:17 +08:00 via iPhone
你这个是因为他们程序员懒没有做验证失效的逻辑而已。
确实不做会非常简单,只需要验证时间令牌就行,前后端完全可以独立工作,如果做验证后失效就需要一个中心化的服务。 |
12
Les1ie 2018-12-23 21:57:21 +08:00
曾经给某安全公司的一个业务网站做 src 的时候发现了重置密码的验证码可以复用, 拿着一个手机验证码在一定的时间内可以无限次数的修改密码,然而交上去之后忽略了说这不是漏洞
结论:可能设计就是这样吧,毕竟我写的代码太少了也没啥经验 ,毕竟安全公司的开发经验肯定比我多 :) |
13
huclengyue 2018-12-23 22:48:47 +08:00 via Android 1
@GLaDOSi 不会,国外会用国外的号码发短信
|
14
huclengyue 2018-12-23 22:50:47 +08:00 via Android
发短信是要成本的。你就算再让它发一条短信过来,验证码极有可能还是一样的
|
15
MonoLogueChi OP @huclengyue 应该不会是一样的吧,再发一条请求应该是和没收到验证码是一样的吧
|
16
virusdefender 2018-12-23 23:29:30 +08:00
有可能是没有销毁,没生成新的导致没覆盖,是 bug
也有可能是类似两步验证那样,基于时间的,一段时间内的验证码都可以验证通过,微信就是这样的 |
17
koche 2018-12-23 23:42:38 +08:00 via Android
可能验证码实则用的是一次性密码,或者动态密码的机制,类似于银行 u 盾,一段时间内都是有效的
|
18
GLaDOSi 2018-12-24 02:09:52 +08:00 via Android
|
19
chinvo 2018-12-24 02:19:16 +08:00 via iPhone
现在大部分短信验证码是 TOTP,也就是说在他设计的有效期内可以无限次使用。
当然不偷懒的话用 Counter-based HOTP 或者其他逻辑来生成就能避免重用了 |
20
xfspace 2018-12-24 07:49:33 +08:00 via Android
某省会的社保中心发验证码 24 还是 48 小时内多次有效,期间不二次发送🌚
|
21
NicholasYX 2018-12-24 09:07:46 +08:00
一般是有效时间内可以使用多次。
|
22
kulove 2018-12-24 09:10:37 +08:00
使用后是要销毁的
|