想问一下,短信验证码一般有没有用后销毁的设计 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MonoLogueChi
V2EX    问与答

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

  •  
  •   MonoLogueChi 2018 年 12 月 23 日 4500 次点击
    这是一个创建于 2585 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

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

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

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

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

    当然不偷懒的话用 Counter-based HOTP 或者其他逻辑来生成就能避免重用了
    xfspace
        20
    xfspace  
       2018 年 12 月 24 日 via Android
    某省会的社保中心发验证码 24 还是 48 小时内多次有效,期间不二次发送
    NicholasYX
        21
    NicholasYX  
       2018 年 12 月 24 日
    一般是有效时间内可以使用多次。
    kulove
        22
    kulove  
       2018 年 12 月 24 日
    使用后是要销毁的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     3445 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 38ms UTC 04:50 PVG 12:50 LAX 20:50 JFK 23:50
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86