【发布时间】:2014-08-19 15:52:16
【问题描述】:
所以我已经让 Passport 与 Node.js 和 MongoDB 一起用于会话管理,这当然可以方便地提供对请求标头中的 user 对象的访问。但是,至少对我来说,Passport 将此对象设置为来自 MongoDB 的整个帐户文档。对于我创建的架构,这包括有关用户的所有信息 - 电子邮件、姓名、散列和加盐密码等。所以我对此有两个问题。
首先,在服务器和客户端之间反复发送所有这些信息真的安全吗?当然它是通过 SSL 发送的,并且密码是经过哈希处理和加盐的——但所有用户信息仍然存在。我的架构是否应该将用户信息(身份验证不需要的个人信息)保存在不同的 MongoDB 文档中?即使我这样做了,散列密码仍然会来回传递。是否假设 SSL 可以防止该数据被窃听?似乎如果有人假设有人设法吸收了发送到我的应用程序的每个标头,他们就可以重新创建用户数据库并执行彩虹表攻击。
其次,在服务器端,我(天真的?)一直在使用请求标头用户名元素 (req.user.username) 来确定连接和验证了哪个用户。但是,似乎如果用户只是将他们的标题更改为不同的用户名,我的代码将允许他们伪装成不同的用户。那么我是否应该通过其他方式验证请求的身份,而不仅仅是使用可用的明文用户名?还是我完全不了解这些标头是如何存储、生成和传递的,这实际上不是安全问题?如果是这样 - 有人可以详细说明一下 Passport 中的这些标头是如何创建的吗?
【问题讨论】:
-
参见会话下的passportjs.org/guide/configure。您绝对不想公开这些数据,因为安全经验法则是只显示必要的内容。会话是为了隐藏这些东西。
标签: node.js mongodb security http-headers passport.js