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

2020-02-24 12:02:41 +08:00
 ztxcccc
用户表已经有密码字段,需要额外支持短信验证码登录,这个验证码如何存储比较合适
3069 次点击
所在节点    问与答
26 条回复
jadec0der
2020-02-24 12:08:48 +08:00
1. 限时几分钟的东西不怕拖库
2. 随机生成的东西,不存在泄露用户的密码的可能

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

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

就这件事来说,如果短信验证码是 critical data (我司 critical data 有 26 类,绝非只有卡号和 session),那就必须要加密传输、加密保存。短信验证码除了短信接口没有其他系统需要知道明文内容,所以可以生成出来就用短信 service 的公钥加密,或者直接让短信 service 生成,再返回一个 salt 和 hash。这一套做下来收益并不大,也就是减少了十几个人登录用户账号的可能性,但是如果一个几十万人的公司不在每一个细节上都认真处理的话,那就像筛子一样,处处漏风。
jadec0der
2020-02-25 03:24:26 +08:00
@danmu17 另外,我也在国外。在国外不是你暴躁的理由,寂寞的话找个女朋友,别在论坛上到处喷人 ➡️ https://www.v2ex.com/t/647128
danmu17
2020-02-25 04:41:16 +08:00
@cnskis 哈哈,他这种半桶水一辈子都不会懂的。。。
danmu17
2020-02-25 04:43:17 +08:00
@cnskis 他这种菜鸡还处于以为只有密码才能登录账户的阶段。。。
danmu17
2020-02-25 04:47:10 +08:00
@jadec0der 菜鸡就是菜鸡。。。“短信验证码除了短信接口没有其他系统需要知道明文内容,所以可以生成出来就用短信 service 的公钥加密,或者直接让短信 service 生成,再返回一个 salt 和 hash。”,果然又说出了槽点无数的话。。。这次就不做你老师了,mark 一下以后无聊的时候看着笑笑。。。
0bject
2020-02-25 04:57:20 +08:00
@danmu17 你可能水平很高, 但是无德
qinrui
2020-02-25 05:01:16 +08:00
为什么工程师会有登录用户账号权限?
jadec0der
2020-02-25 05:15:45 +08:00
@0bject 不用回他,说话难听不要紧,有理由我就能听,但是既然是个说不出理由的 troll,block 就好了。

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

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

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

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

© 2021 V2EX