V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
MonoLogueChi
V2EX  ›  问与答

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

  •  
  •   MonoLogueChi · 2018-12-23 16:39:46 +08:00 · 3957 次点击
    这是一个创建于 2155 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

    当然不偷懒的话用 Counter-based HOTP 或者其他逻辑来生成就能避免重用了
    xfspace
        20
    xfspace  
       2018-12-24 07:49:33 +08:00 via Android
    某省会的社保中心发验证码 24 还是 48 小时内多次有效,期间不二次发送🌚
    NicholasYX
        21
    NicholasYX  
       2018-12-24 09:07:46 +08:00
    一般是有效时间内可以使用多次。
    kulove
        22
    kulove  
       2018-12-24 09:10:37 +08:00
    使用后是要销毁的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   934 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 21:48 · PVG 05:48 · LAX 13:48 · JFK 16:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.