Javascript 在使用Express的Node.js中,根据用户凭据限制对路由的访问

Javascript 在使用Express的Node.js中,根据用户凭据限制对路由的访问,javascript,node.js,express,authentication,passport.js,Javascript,Node.js,Express,Authentication,Passport.js,在express应用程序中,用户使用其web身份(google、facebook、amazon等)登录passport.js进行此操作。我已经创建了一条路线。但我们只希望单个用户可以访问它。 我对它进行了广泛的测试,但不完全确定它是否足够安全? 这是我的路线代码: app.get("/superSecretPage", function(req, res){ console.log(req.user); if (req.isAuthenticated()){ if (req.us

在express应用程序中,用户使用其web身份(google、facebook、amazon等)登录passport.js进行此操作。我已经创建了一条路线。但我们只希望单个用户可以访问它。 我对它进行了广泛的测试,但不完全确定它是否足够安全? 这是我的路线代码:

app.get("/superSecretPage", function(req, res){
  console.log(req.user);
  if (req.isAuthenticated()){
    if (req.user.userId === "XXXXXXXXXXXXXXXX") {
      User.find({}, function(err, users){
        res.render("userlist", {
          users: users,
          });
      });
    } else {
    res.render("invalid")
    }

  } else {
    res.redirect("login")
  }
});
XXXXXXXXXXXXXX=是来自Google/Amazon/Facebook或其他ID提供商的用户唯一ID


正如我所说,这是可行的,并且只允许用户等于req.user.userId,但是这足够安全吗?

这不是一种正确的方法。如果您想稍后允许其他用户,您将怎么做?是否打开代码并编辑
用户Id

不要硬编码
用户ID

你需要实施。您需要创建一个超级超级用户角色,并将其分配给希望允许其访问您的超级机密页面的用户。并使用中间件检查角色权限

这将帮助您:


这不是一种正确的方法。如果您想稍后允许其他用户,您将怎么做?是否打开代码并编辑
用户Id

不要硬编码
用户ID

你需要实施。您需要创建一个超级超级用户角色,并将其分配给希望允许其访问您的超级机密页面的用户。并使用中间件检查角色权限

这将帮助您:

就像我说的,这是可行的,只允许用户等于req.user.userId,但是这足够安全吗

你还没有真正表现出足够的能力来了解这个系统的整体安全性。安全性至少取决于以下方面:

  • req.isAuthenticated()的实现
  • 如何建立和保护用户会话。大多数会话都使用浏览器cookie来标识会话,并且必须通过https运行以提供任何保护。然后,您还必须具有适当的自动注销功能,以减少会话处于活动状态的可能性,以便其他人可以在该计算机上使用该会话
  • 首先,如何设置
    req.user.userId
    。你没有展示这一点,所以我们真的不知道这背后是什么,也不知道它是否遵循良好的安全实践
  • 如果用户会话存在任何持久性存储,则该存储机制的安全性是相关的
  • 假设存在登录机制,是否需要安全(难以猜测)凭据?是否有反黑客保护措施来阻止凭证猜测
  • 如果您100%确定
    req.user.userId
    有效,并且此连接属于该userId的相应用户,则此代码位工作正常。但是,麻烦在于确保
    req.user.userId
    正确连接到授权用户的细节,而这正是安全工作的难点所在

    就像我说的,这是可行的,只允许用户等于req.user.userId,但是这足够安全吗

    你还没有真正表现出足够的能力来了解这个系统的整体安全性。安全性至少取决于以下方面:

  • req.isAuthenticated()的实现
  • 如何建立和保护用户会话。大多数会话都使用浏览器cookie来标识会话,并且必须通过https运行以提供任何保护。然后,您还必须具有适当的自动注销功能,以减少会话处于活动状态的可能性,以便其他人可以在该计算机上使用该会话
  • 首先,如何设置
    req.user.userId
    。你没有展示这一点,所以我们真的不知道这背后是什么,也不知道它是否遵循良好的安全实践
  • 如果用户会话存在任何持久性存储,则该存储机制的安全性是相关的
  • 假设存在登录机制,是否需要安全(难以猜测)凭据?是否有反黑客保护措施来阻止凭证猜测

  • 如果您100%确定
    req.user.userId
    有效,并且此连接属于该userId的相应用户,则此代码位工作正常。但是,麻烦在于确保
    req.user.userId
    正确连接到授权用户的细节,而这正是安全工作的难点所在。

    在db模式中添加一个字段,并将其设置为一个数组,其中包含用户有权访问的所有路由。验证循环时,通过数组查看他/她是否可以访问他/她尝试访问的路由。

    在db架构中添加一个字段,并将其设置为包含用户有权访问的所有路由的数组。验证时,通过阵列循环以查看他/她是否可以访问他/她正在尝试的路由。

    谢谢!但在这种情况下,我只希望这一个用户(我)拥有访问权限。如果是这样的话,它仍然不是一个很好的访问实现吗?当然不是。但是不要硬编码这些值。因为我仍然在学习这些,我还有一个问题要问你。如果我把userID放在一个.env文件中会更好吗?另外,在安全方面,是否有可能另一个用户欺骗同一个用户ID来访问“秘密页面”谢谢!但在这种情况下,我只希望这一个用户(我)拥有访问权限。如果是这样的话,它仍然不是一个很好的访问实现吗?当然不是。但是不要硬编码这些值。因为我仍然在学习这些,我还有一个问题要问你。如果我把userID放在一个.env文件中会更好吗?另外,在安全方面,是否有可能另一个sp