为了账号安全,请及时绑定邮箱和手机立即绑定

登录模块,用户密码是在哪个阶段计算hash的?

登录模块,用户密码是在哪个阶段计算hash的?

ABOUTYOU 2019-03-21 18:19:38
问题描述想知道用户密码应该是明文传到后端计算hash验证还是先计算hash再传到后端验证?问题出现的环境背景及自己尝试过哪些方法略相关代码// 请把代码文本粘贴到下方(请勿用图片代替代码)略你期待的结果是什么?实际看到的错误信息又是什么?如题
查看完整描述

4 回答

?
三国纷争

TA贡献1804条经验 获得超7个赞

从直觉出发也能知道,将用户的密码以明文形式传输是不安全的。前端应该将用户输入的密码作散列或者非对称加密后再传输到后端。如果一定要传输明文,至少也应该使用https。


查看完整回答
反对 回复 2019-04-14
?
桃花长相依

TA贡献1860条经验 获得超8个赞

不知道谁给上面的点的踩,这里补充一点儿内容。
首先,作为开发者,不应该知道用户的原文密码。犹如上面说的

前端计算和后台计算两种方式都有,但后台计算的方式显然更加不安全

的确,从安全的角度来说,如果是 http 那么用户在向后台发送数据时如果有第三方介入,就已经不安全了,第三方就可以在这里面拿到密码原文了,但是如果在前端使用 md5 + salt 就已经确保了在传输过程中第三方无法完全取得用户的密码原文,因为是hash算法,即使第三方拿到了算法也无济于事,碰撞也是需要成本的,只要你的 salt 够长,或者算法够安全,这就是绝对安全,基本做到了,但是 问题就在于,因为算法不可解密,后台也无法验证hash是用户发出的或者说第三方修改后的,毕竟从这个时候开始,服务器已经只认识 hash 了并不知道原文,如果想想一下是在注册传输过程中,第三方修改了 数据,后台也会信任,因为这是建立在 http 的基础上的,基本谈不了安全。

也有人会觉得 那不用hash 用可以解密的方式,例如 RSA ,对称加密,由前端散布公钥进行加密,加密完成后只有私钥可以解密,然后服务端就可以用私钥解密出数据,但是!RSA 加密的数据长度是有限的。其次 你在这里做的工作其实已经有人帮我们做了,那就是 https 。

还有的解决方案 比如 AES / RSA 混合加密,这些东西,不是没人去使用,而是成本过大。就像用6位数密码保管者2位数的余额。


查看完整回答
反对 回复 2019-04-14
?
呼唤远方

TA贡献1856条经验 获得超11个赞

前端计算和后台计算两种方式都有,但后台计算的方式显然更加不安全,密码最好尽可能快的转换为不可逆的散列值。一般是在登录提交用户名密码之前计算密码的散列值,由前端计算。


查看完整回答
反对 回复 2019-04-14
  • 4 回答
  • 0 关注
  • 704 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信