V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Sponsored by
LinkedIn
不坐班的神仙工作 · 去任何你想去的地方远程,赚一线城市的工资
2000 个不用出门 Social 的全球远程工作,帮助 V2EX 的小伙伴开启全新的工作方式。
Promoted by LinkedIn
ztxcccc
V2EX  ›  问与答

用于账户登陆的短信验证码需要 hash 存储吗

  •  
  •   ztxcccc · 2020-02-24 12:02:41 +08:00 · 2403 次点击
    这是一个创建于 946 天前的主题,其中的信息可能已经有所发展或是发生改变。
    用户表已经有密码字段,需要额外支持短信验证码登录,这个验证码如何存储比较合适
    26 条回复    2020-02-25 13:47:18 +08:00
    jadec0der
        1
    jadec0der  
       2020-02-24 12:08:48 +08:00   ❤️ 1
    1. 限时几分钟的东西不怕拖库
    2. 随机生成的东西,不存在泄露用户的密码的可能

    但是 hash 加盐是个好习惯,例如,可以防止有数据库权限的工程师登录用户账号
    cxyfreedom
        2
    cxyfreedom  
       2020-02-24 12:21:59 +08:00
    直接缓存 kv 手机号和验证码,设置过期时间
    chinvo
        3
    chinvo  
       2020-02-24 14:45:11 +08:00 via iPhone   ❤️ 1
    这种验证码不通常是 TOTP/HOTP 么
    virusdefender
        4
    virusdefender  
       2020-02-24 15:05:28 +08:00
    楼上正解,其实不用存储,推算就可以了
    muskill
        5
    muskill  
       2020-02-24 15:42:43 +08:00
    这种东西还要存数据库? 用户量上来了,不崩溃算我输,用 cache 这种中间件来解决多好,例如 redis 什么的 cache
    danmu17
        6
    danmu17  
       2020-02-24 16:06:07 +08:00
    @jadec0der 哈哈,真是每天都能撞见各种不懂装懂的。。。你说的最后一句的槽点真是多到了我都不知道应该从哪里吐槽的程度了。。。
    iConnect
        7
    iConnect  
       2020-02-24 16:23:52 +08:00 via Android
    session 临时存储就可以了
    Tokin
        8
    Tokin  
       2020-02-24 16:51:08 +08:00
    redis 临时存一下就好,没必要存数据库里,失效之后全是冗余。。。
    jadec0der
        9
    jadec0der  
       2020-02-24 23:58:57 +08:00
    @danmu17 请展开讲讲
    danmu17
        10
    danmu17  
       2020-02-25 02:23:00 +08:00
    @jadec0der 看你态度还行我就再次好心免费做个老师,你最后一句话处处都是槽点,先拿最最最基本的来说吧,登录账号用的不是密码,而是放在数据库里的 session/token/uuid/ip,密码是用来获取或创建这些东西用的,希望你的水平够能够看得懂。。。一个有数据库权限的工程师是绝对不需要用户密码来登录用户帐号的。。。甚至目前的 botnet 都不偷密码了,他们只偷卡号,和 session。
    danmu17
        11
    danmu17  
       2020-02-25 02:41:50 +08:00   ❤️ 1
    @jadec0der hash 唯一的用处就是不明文记录用户密码,因为密码本来就不是登录账户所需要的东西,他是验证用户身份用的,而且事实上验证用户身份也完全不需要密码,所以就用 hash 来验证用户身份了。对于有数据库权限的工程师而言,明文的密码也不是用来登录用户账号的,而是用来登录用户在其他网站的账号的。这些都是非常基本的东西,可惜现在的 V2EX 上唯一会好心教你们这些小白的据我所知就只剩下因为肉身翻墙长期找不到人说中文的我了。。。
    cnskis
        12
    cnskis  
       2020-02-25 02:50:16 +08:00 via Android
    我都有数据库权限了,还偷账号密码做什么……迷惑。
    @jadec0der
    jadec0der
        13
    jadec0der  
       2020-02-25 03:22:29 +08:00   ❤️ 1
    @danmu17
    @cnskis 哦,我懂了,可能是因为你们的公司不够大,所以才会有都有数据库权限了还偷账号密码做什么的疑惑。

    我们公司几十万员工,差不多 7W 工程师,每个人都有一些数据库权限,但是只有极少数人能登录用户的账号。所以做 security review 的时候基本思路是先做 data classification,然后画 data flow,最后做 threat model,减少攻击面。

    就这件事来说,如果短信验证码是 critical data (我司 critical data 有 26 类,绝非只有卡号和 session),那就必须要加密传输、加密保存。短信验证码除了短信接口没有其他系统需要知道明文内容,所以可以生成出来就用短信 service 的公钥加密,或者直接让短信 service 生成,再返回一个 salt 和 hash。这一套做下来收益并不大,也就是减少了十几个人登录用户账号的可能性,但是如果一个几十万人的公司不在每一个细节上都认真处理的话,那就像筛子一样,处处漏风。
    jadec0der
        14
    jadec0der  
       2020-02-25 03:24:26 +08:00
    @danmu17 另外,我也在国外。在国外不是你暴躁的理由,寂寞的话找个女朋友,别在论坛上到处喷人 ➡️ https://www.v2ex.com/t/647128
    danmu17
        15
    danmu17  
       2020-02-25 04:41:16 +08:00
    @cnskis 哈哈,他这种半桶水一辈子都不会懂的。。。
    danmu17
        16
    danmu17  
       2020-02-25 04:43:17 +08:00
    @cnskis 他这种菜鸡还处于以为只有密码才能登录账户的阶段。。。
    danmu17
        17
    danmu17  
       2020-02-25 04:47:10 +08:00
    @jadec0der 菜鸡就是菜鸡。。。“短信验证码除了短信接口没有其他系统需要知道明文内容,所以可以生成出来就用短信 service 的公钥加密,或者直接让短信 service 生成,再返回一个 salt 和 hash。”,果然又说出了槽点无数的话。。。这次就不做你老师了,mark 一下以后无聊的时候看着笑笑。。。
    0bject
        18
    0bject  
       2020-02-25 04:57:20 +08:00   ❤️ 5
    @danmu17 你可能水平很高, 但是无德
    qinrui
        19
    qinrui  
       2020-02-25 05:01:16 +08:00 via iPhone
    为什么工程师会有登录用户账号权限?
    jadec0der
        20
    jadec0der  
       2020-02-25 05:15:45 +08:00
    @0bject 不用回他,说话难听不要紧,有理由我就能听,但是既然是个说不出理由的 troll,block 就好了。
    0bject
        21
    0bject  
       2020-02-25 05:31:39 +08:00
    @jadec0der block 了, 还不知道有这个功能, 不过我很好奇他在什么地方, 竟然没有人和他讲中文...
    KallyDev
        22
    KallyDev  
       2020-02-25 05:56:56 +08:00 via iPhone
    @danmu17 看了一下你的历史回复,也算是理解为什么看到 #6 上来就怼,#10 高人一等时会产生莫名其妙的感觉。敢情你不是正在怼就是在怼的路上,在 V 站发言前请点击关于,记住“ 保持对他人的友善”八个字,接楼上 Block + 1
    jadec0der
        23
    jadec0der  
       2020-02-25 06:11:26 +08:00
    @0bject 🤷‍♂️
    cnskis
        24
    cnskis  
       2020-02-25 11:34:50 +08:00
    @jadec0der 感谢,学习了,我还单纯的认为数据库对部分开发人员是全开放的。
    @danmu17 可能他刚接触,可以理解下。
    j0hnj
        25
    j0hnj  
       2020-02-25 12:41:47 +08:00 via iPhone
    我说怎么看不到那个人的回复,原来我早就 block 了(~_~)
    rrZ2C
        26
    rrZ2C  
       2020-02-25 13:47:18 +08:00
    真的是..... 承受 他这种 不是半桶水 不是菜鸡,即好心又免费一辈子永远比我懂的老师 。
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   1150 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 44ms · UTC 21:37 · PVG 05:37 · LAX 14:37 · JFK 17:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.