H5W3
当前位置:H5W3 > 其他技术问题 > 正文

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

问题描述

想知道用户密码应该是明文传到后端计算hash验证还是先计算hash再传到后端验证?

问题出现的环境背景及自己尝试过哪些方法

相关代码

// 请把代码文本粘贴到下方(请勿用图片代替代码)

你期待的结果是什么?实际看到的错误信息又是什么?

如题

回答:

不能依赖前端的hash,前端hash主要防止明文密码泄露被用于其他网站的密码爆破(如果都用同一个密码)以及被日志直接记录,后端一定要做(不然数据库中的hash值就相当于明文密码),最好使用加盐哈希,策略不要用常见的一次md5等。保障前端与服务器的通信安全使用HTTPS

回答:

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

回答:

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

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

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

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

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

回答:

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

本文地址:H5W3 » 登录模块,用户密码是在哪个阶段计算hash的?

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址