【发布时间】:2016-04-10 12:45:15
【问题描述】:
我正在构建一个以 express.js 作为后端的单页应用程序。目前我正在使用 passport.js 本地策略进行身份验证,使用 bcrypt 将加密密码保存在 db 上。在认证过程中,用户提供的密码被再次加密,并与存储在数据库中的密码对峙。但是,我目前将密码以明文形式发送到服务器,并且我理解这是一种非常糟糕且不安全的做法。要正确执行此操作,我理解我必须:
在服务器上创建随机字节并发送给客户端
在客户端创建随机字节
将加密后的密码和两组字节连接起来,全部加密
将加密对象和客户端生成的字节以明文形式发送回服务器
在服务器上重现相同的加密对象并检查有效的身份验证
我可以在客户端使用 bcrypt 和一些随机生成器再次执行此操作,但我有强烈的感觉,我不应该自己实现它。与护照或某些我不知道的节点库有一些集成?
【问题讨论】:
-
这行不通。您绝对肯定需要 TLS (SSL) 来保护从服务器到客户端的通信。有更安全的选择,但它们的工作量很大。在短期内,你能做的最好的事情就是打开 TLS,不要摆弄像这样疯狂的事情。
标签: node.js security authentication passwords passport.js