gpt4 book ai didi

node.js - 了解 Passport.js - 篡改序列化用户

转载 作者:太空宇宙 更新时间:2023-11-03 23:40:47 24 4
gpt4 key购买 nike

我正在尝试了解 passport.js,并且确信我没有正确使用它。

特别是使用 serializeUser()deserializeUser() 函数。我的功能与下面的两个类似。我本质上是将我的数据库 user._id 推送到 session 中(我不喜欢这样做),并且可以使用 cookie 查看器在浏览器中轻松查看它。

passport.serializeUser(function(user, done) {
done(null, user._id);
});

passport.deserializeUser(function(id, done) {
done(null, id);
});

因此,对于每个安全请求,我都会运行一个 isAuthenticated() 函数来检查用户是否已通过 Passport 进行身份验证,然后使用 req.user 中的反序列化 ID 对数据库执行各种 CRUD 操作。

我想知道什么会阻止经过身份验证的用户在 session 中将自己的 user._id 替换为其他人的 user._id,并阻止其他用户访问所有这些 CRUD 数据库操作。

  • Passport 是否有某种哈希算法来检查序列化数据没有被篡改?
  • 我不应该使用返回的 ID 进行数据库 CRUD 操作吗?
  • 是否有其他方法可以避免将 user._id 发送到浏览器?

最佳答案

  • 这是 session 中间件,可确保 session 数据不被篡改,您只需提供将用于对其进行签名的 secret 选项。

来自快速 session 中间件文档 ( https://github.com/expressjs/session )

secret - session cookie 使用此 secret 进行签名以防止篡改。

例如。 app.use(session({ Secret: '键盘猫', cookie: { maxAge: 60000 }}))

The serialization and deserialization logic is supplied by the application, allowing the application to choose an appropriate database and/or object mapper, without imposition by the authentication layer.

所以,你必须实现serializeUser()和deserializeUser()方法。 Serialize 方法将返回身份信息,以便在将来的请求时恢复用户。该身份信息将保存在 session 中。反序列化方法应该能够根据该身份信息来识别用户。是否使用数据库 ID、随机生成的字符串、UUID 或类似的内容取决于您和您的安全要求。

关于node.js - 了解 Passport.js - 篡改序列化用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24164106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com