node.js - 用于检查身份验证的快速 session 中间件

标签 node.js express session express-session

我对 express-session session 的使用有疑问。我真的不明白 session 如何安全。例如在以下官方指南中:https://expressjs.com/en/resources/middleware/session.html他们创建一个中间件来检查用户是否经过身份验证:

// middleware to test if authenticated
function isAuthenticated (req, res, next) {
  if (req.session.user) next()
  else next('route')
}

但我不明白,为什么这个中间件不检查 session 实际上是否在数据库内部?攻击者可以用随机值修改 session cookie,并且 user 字段中仍然会有一些值,即使它是一个垃圾值,不是吗?因此该函数仍然会认为这是经过身份验证的用户。

为什么这是不可能的?

就我而言,我在 session 中设置userId,然后每次有人发出请求时,我都会检索其userId,但我不明白,什么如果有人修改 cookie 并获取随机 userId 值?我的应用程序会认为该用户已通过身份验证,对吗?

最佳答案

why isn't this middleware checking that the session is in fact, inside the DB?

您正确期望完成的这项检查之前已经在 express-session 中间件中完成:这将查找 session cookie 的值 session 存储(可以是数据库)并相应地填充req.session。由于 session cookie 的值是无法猜测的,因此输入随机值的攻击者将使 req.session 未定义,并且 isAuthentication 检查将失败,这是理所应当的.

关于node.js - 用于检查身份验证的快速 session 中间件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73049959/

相关文章:

javascript - 无法从 Facebook 登录获取电子邮件(API 版本 2.8)

javascript - 在 Mongoose 路由中使用 Promise

node.js - Express应用程序找不到index.html

session - ZF2 session 验证器

mysql - 类型错误 : Cannot read property 'query' of undefined?

javascript - Node.js 和 64 位变体

javascript - 如何访问通过函数传回的 Promise?

javascript - Node.js Mongodb 集成问题; 。节省()

php - 我应该在我的网站上使用 "LOGINS" session 吗?

java - 如何仅根据 SessionID 终止任何 session