Node.js 黑客可以修改发送到web服务器的请求吗?我正在根据请求中的对象对用户进行身份验证

Node.js 黑客可以修改发送到web服务器的请求吗?我正在根据请求中的对象对用户进行身份验证,node.js,express,passport.js,express-handlebars,Node.js,Express,Passport.js,Express Handlebars,我是nodejs的初学者,我正在创建我的web应用程序。我使用passportJs进行身份验证。如中所述,当用户成功通过身份验证时,将创建req.user,并可在任何路由中访问 我的管理员把手 router.get('/' , (req , res)=>{ const current_user = req.user if (!req.user) { res.redirect('/login') } else{ res.render('

我是nodejs的初学者,我正在创建我的web应用程序。我使用passportJs进行身份验证。如中所述,当用户成功通过身份验证时,将创建req.user,并可在任何路由中访问

我的管理员把手

router.get('/' , (req , res)=>{
    const current_user = req.user
    if (!req.user) {
        res.redirect('/login')
    } else{
        res.render('admin/index',{user_data:current_user })
    }
   

})
使用passportJS进行身份验证

passport.use(new LocalStrategy({usernameField:'email'}, (email,password,done)=>{
    
    userModel.findOne({email:email}).then((user)=>{
     if (!user) return done(null,false,{message: "No User found"})
     bcrypt.compare(password,user.password,(err,matched)=>{
        if(err)return err
        if(matched){
            
            return done(null,user)
        }else {return done(null,false,{message:"Incorrect Password"})}


     })

       
    })     
  
 }))


 passport.serializeUser(function(user, done) {
    done(null, user.id);
  });
  
  passport.deserializeUser(function(id, done) {
    userModel.findById(id, function(err, user) {
      done(err, user);
    });
  });



router.post('/login', 
(req,res,next)=>{
passport.authenticate('local', { successRedirect: '/admin',
failureRedirect: '/login',
failureFlash: 'Invalid username or password.'}

)(req,res,next)}


)

  
这是我的问题:

如您所见,只有当req中存在.user时,用户才会被重定向到管理页面。那么黑客可以在请求中添加一个空的.user并访问我的管理页面吗

这是一个奇怪的问题。有没有更好的办法?提前感谢:)

最终用户(在您的情况下是黑客)可以向任何请求添加任何类型的数据。所以,是的,最终用户可以修改请求以在其中发送req.user。但是,如果您使用
req.isAuthenticated()
,他们将无法访问其中的数据,并且他们的请求将不会在您的“管理”端点上被接受

这是因为passport JS将用户序列化,并在加密后将信息存储在会话中。因此,除非最终用户(黑客)能够访问另一个用户的机器,并从其浏览器复制所有会话详细信息(浏览器不允许其他站点访问另一个站点会话)并使用它,否则他们将无法使用admin

TLDR


不,他们不能通过简单地在请求中添加req.user来访问“admin”端点。

前端或用户端是互联网的丛林。永远不要相信来自那里的任何东西。始终执行检查和验证。