node.js - Passport.js deserializeUser 如何解密哈希 session 数据?

标签 node.js express passport.js express-session

用户通过发送 POST 来表示/login 登录后,passport 将附加一个 session cookie,从而建立持久 session 。这是通过serializeUser 函数完成的。然后express-session将使用这个函数生成一个散列(使用HMAC计算)并将其发送出去。

在下一个请求中,passport 以某种方式设法使用 deserializeUser 函数解密散列字符串并从中检索用户数据。如果express-session真的对字符串进行哈希处理,这怎么可能呢?哈希不是单向函数吗?如果 express-session 不对字符串进行哈希处理,那么这不是一个安全漏洞吗?

最佳答案

由应用程序提供serializeUserdeserializeUser

应用程序应该能够安全地执行deserializeUser,因为它们可以检查它们收到的每个哈希(由 Passport 中间件通过request.session设置和读取;我认为感兴趣的负责部分可能是这些:https://github.com/expressjs/session/blob/master/index.js#L160https://github.com/jaredhanson/passport/blob/master/lib/sessionmanager.js#L18-L25(或在最近维护的 fork 上,https://github.com/passport-next/passport/blob/master/lib/sessionmanager.js#L21-L28))对照它们存储在自己的本地数据库/文件中的 map /service,之前已关联并存储此类用户 session 哈希值以及用户名(和/或其他特定 session 信息)。

该应用程序不需要将密码作为原始文本存储在服务器上,这是我认为主要关注的问题,因为暴露的服务器不仅会向黑客泄露该站点的数据,还会泄露经常在其他站点重复使用的用户的密码。对用户名进行哈希处理对于隐私来说会更好一些,因为检查用户 cookie 中旧 session 哈希的人甚至不知道他们是哪个用户。

中间件在请求对象上设置任何 session 对象不应该存在安全问题,因为中间件的选择和顺序是在应用程序的控制之下,而不是通过网络传输。

关于node.js - Passport.js deserializeUser 如何解密哈希 session 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56778979/

相关文章:

node.js - 异步函数discord.js 中的awaitMessages

node.js - 监听 process.env.PORT 时 heroku 应用程序崩溃

javascript - 如何使用 Passport.js 获取当前 session 的用户名?

node.js - Mongoose 模式 : how to set max number of items in an array?

node.js - 我们如何将winston日志写入SQL Server?

google-oauth - 为什么我们需要clientID和clientSecret

node.js - 错误: Failed to find request token in session for passport-twitter

node.js - Express Generator 忽略端口设置

javascript - q.在 promise 完成之前全部返回

node.js - 通过 cradle 将参数传递给 couchdb 中的 View