关于前后端密码传输与存储?

2021-07-14 08:45:14 +08:00
 daguaochengtang
登录时,前端调用接口传的密码参数(加密,不加密),以及后端存储密码(加密,不加密)。你们是怎么做的?
排列组合有 4 种:
1. 前端加密,后端加密
2. 前端加密,后端不加密
3. 前端不加密,后端加密
4. 前端不加密,后端不加密
我们目前采用的是第 1 种,用户传输加密后的密码直接和库里加密后的密码比对。但是我偶然听闻了之前 csdn 发生过用户密码大量泄漏的事件。就想到其实前后端都加密的话,如果数据库密码泄露,不就能直接调接口了吗?
所以我想,是不是第 3 种要安全一点,前端传输名文,服务端拿到名文密码后,加密后与库里密码比对。这样即使数据库密码泄露,也无法得知密码名文,就无法调接口了。
当然,我知道,如果数据库都泄露了,光凭这一点已经无法谈及安全问题了。只是想就事论事,想知道你们是怎么做的,这个是否有业内约定俗成的标准?
6966 次点击
所在节点    问与答
51 条回复
3dwelcome
2021-07-14 09:59:32 +08:00
"只是想就事论事,想知道你们是怎么做的,这个是否有业内约定俗成的标准?"

后端数据加密不是约定,而是强制性的。否则你网站的公安备案,都没办法正常通过。
bfdh
2021-07-14 10:08:49 +08:00
如果没有 TLS 的话,可以考虑 challenge handshake authentication protocol 。
bfdh
2021-07-14 10:09:50 +08:00
@3dwelcome 强制?那 CSDN 咋回事?
3dwelcome
2021-07-14 10:10:47 +08:00
@bfdh CSDN 都多少年前的事情了,那时候还没有公安备案这个说法。
xingyue
2021-07-14 10:11:27 +08:00
1 的方案按理说最好呀,不存在楼主说的问题,前端 hash(username+pwd),后端拿到后 hash(hashPwd+salt)进行存储,即便你数据库泄露了也没法得到 hashPwd,后端鉴权发 token 的接口接收的参数是 hashPwd,别人也没法调用你的接口。ps:ssl 固然安全可信,但是用户环境不可信,避免明文传输还是有必要。
seesky
2021-07-14 10:18:03 +08:00
用 1, 不仅客户端不可信, 你同事也不可信, 前端加密防止后端会因为打日志出现泄露风险。
0bit
2021-07-14 10:58:50 +08:00
@seesky 是的,据说 twitter 以前就出现过 log 密码明文的情况,还是把密码明文在前端做 Hash 之后再给后端更稳妥
walpurgis
2021-07-14 12:15:28 +08:00
hash 不是加密
killerv
2021-07-14 13:20:32 +08:00
@marcomarco 加密方式泄漏也无所谓吧,非对称加密,前端使用公钥加密,后端使用私钥解密,没什么问题的。
killerv
2021-07-14 13:21:13 +08:00
一般如果不是对安全要求特别高的场景,在 https 的基础上可以选择 3 。另外后端的密码不是加密,是 Hash,不可逆。
Felldeadbird
2021-07-14 13:25:28 +08:00
前端用最快,最容易,最简单的 hash 处理原始密码即可。
后面有 SSL,后端二次加密,加盐,加料手段。安全已经完全足够了。
ZeawinL
2021-07-14 13:31:05 +08:00
前端使用用户密码为 key 做加密或者 hash,后端对内容进行二次 hash 。
creanme
2021-07-14 13:43:05 +08:00
b 站好像是前端从接口获取一个限时的公钥,然后用公钥加密,传到后端,后端用私钥解密?
TomatoYuyuko
2021-07-14 13:55:22 +08:00
前端能加个毛线的密,有心破解的话很简单,你正常加盐混淆就行了不用太复杂
ZeroDu
2021-07-14 14:21:28 +08:00
其实后端不一定要拿到原始密码。前端 hash 一次,后端再操作一下,直接入库
FallenTy
2021-07-14 15:44:26 +08:00
登陆:前端 AES 加密,后端解密 MD5 后,与数据库中的 MD5 比对
注册:明文传输,后端 MD5 存入数据库
SelFree
2021-07-14 16:11:35 +08:00
Hash(password) : h1 ------------> Save(Hash(h1 + salt), salt)
xiangyuecn
2021-07-14 16:15:46 +08:00
服务器端各种中间件、各种日志、各种分布式集群

抱歉,不出意外很多都是 http 调用🐶 还不带脱敏的,惊喜不惊喜,前端对密码进行加密、hash 的重要性就比较突出了

另外前端不传明文,对不是特意针对你网站的中间人有一定的防御力,至少不会输一下密码,人家随随便便就能知道这是明文密码

不推荐 hash,应该用对称加密或非对称加密,并且密钥是变化的,如果不变就和 hash 没什么两样
zhaokun
2021-07-14 16:31:37 +08:00
1,前端简单 hash,后端再加密后存储
zhaokun
2021-07-14 16:32:07 +08:00
当然也有 https ( https 也不可信,大多数是可以破解的)

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

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

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

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

© 2021 V2EX