【问题标题】:Only allow passportjs authenticated users to visit protected page只允许通过 passportjs 认证的用户访问受保护的页面
【发布时间】:2013-07-19 08:58:53
【问题描述】:

将此代码放置在路由中是否足以保护页面免受未经身份验证的用户的攻击?

if (!req.user) return res.send(401, "Not allowed in");

【问题讨论】:

    标签: javascript node.js express passport.js


    【解决方案1】:

    只要您没有在某处泄漏路线就足够了。只需确保您的路线顺序正确。

    //checks to be sure users are authenticated
    app.all("*", function(req, res, next){
      if (!req.user) 
        res.send(403);
      else
        next();
    });
    //additional routes will require authentication due to the order of middleware
    app.get("/admin", .... 
    

    但是,如果您将管理路由移到全局路由之上,则管理路由将不再受到保护。例如,您可能想故意将您的登录页面放在更早的位置,这样它就不需要身份验证。

    【讨论】:

      【解决方案2】:

      您可以使用req.isAuthenticated() 来检查请求是否经过身份验证。

      function ensureAuthenticated(req, res, next) {
        if (req.isAuthenticated()) { return next(); }
        res.redirect('/login')
      }
      
      app.get('/server', ensureAuthenticated, routes.server.get);
      app.get('/login', routes.login.get);
      

      或者像这样

      app.all('*', function(req,res,next){
        if (req.path === '/' || req.path === '/login')
        next();
        else
        ensureAuthenticated(req,res,next);  
      });
      

      【讨论】:

      • 上帝,感谢上帝,isAuthenticated() 完全没有记录。这就像图书馆的整个点。总有一天,我会找到这个 Jared Hanson 的家伙,送一架装有橡胶大手的无人机到他家,然后反复打他,因为他用 Passport 拖钓世界。谢谢。
      【解决方案3】:

      更正user568109的答案,用express 4代码必须是这样的:

      app.all('*', function(req,res,next) {
        if (req.path === '/' || req.path === '/login')
          next();
        else
          ensureAuthenticated(req,res,next);  
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-10-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-31
        • 1970-01-01
        相关资源
        最近更新 更多