如何安全地使用Passport与Node.js和MongoDB?

所以我得到了Passport与Node.js和MongoDB的会话pipe理,这当然方便地提供访问请求头中的user对象。 但是,至less对我而言,Passport将这个对象设置为MongoDB的整个帐户文档。 对于我创build的模式,这包括用户的一切 – 电子邮件,名称,哈希和盐渍密码等。所以我有两个关于这个问题。

首先,在服务器和客户端之间来回发送所有这些信息是否真的很安全? 当然,它是通过SSL发送的,密码被哈希和腌制,但所有的用户信息仍然在那里。 我的模式需求用户信息(不需要身份validation的个人信息)保存在不同的MongoDB文档中? 即使我这样做,哈希密码仍然会来回传递。 是否假设SSL防止数据被窃听? 这似乎是假设某人假设已经把所有发送到我的应用程序的头文件都吸走了,他们可以重新创build用户数据库并执行彩虹表攻击。

其次,在服务器端,我(天真的)一直在使用请求标头用户名元素( req.user.username )来确定哪个用户被连接和authentication。 但是,似乎如果用户只是将其标题更改为不同的用户名,我的代码将允许他们伪装成不同的用户。 那么我应该通过其他方式来validation请求的身份,而不是仅仅使用纯文本的用户名呢? 还是我完全不知道如何存储,生成和传递这些头,这实际上不是一个安全问题? 如果是这样的话 – 有人可以详细介绍一下如何从Passport中创build这些头文件吗?

对于你的第一个问题,不,把所有的东西(包括密码哈希)都发送给用户是不行的,这样做会超出它的目的,正如你所说的那样,一旦你有散列,就会更容易做到蛮力攻击(你不会从你的应用程序泄露的数据)

至于第二个问题,你应该有一些中间件或插件,validation请求中存在的cookie实际上是有效的,由你首先生成,可以使用req.user.username作为path句柄中的授权目的一旦您validation了用户之前已经在系统中进行身份validation(通过cookie)

请务必查看这篇博客文章,了解如何构build安全快速应用程序https://blog.liftsecurity.io/2012/12/07/writing-secure-express-js-apps,但如果您仍在考虑使用哪种框架使用,我会看看Hapijs和铃声插件进行身份validation和https://github.com/hapijs/hapi-auth-cookie保持会话。

祝你好运! 🙂