首页 > 解决方案 > Hacker 可以修改发送到 Web 服务器的请求吗?我正在根据请求中的对象对用户进行身份验证

问题描述

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

我的 admin.handlebars

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)}


)

  

这是我的问题:

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

这是一个奇怪的问题。有没有更好的方法来做到这一点?提前致谢 :)

标签: node.jsexpresspassport.jsexpress-handlebars

解决方案


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

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

TLDR;

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


推荐阅读