Может ли хакер изменить запрос, отправленный на веб-сервер? Я аутентифицирую пользователя на основе объекта в запросе

#node.js #express #passport.js #express-handlebars

Вопрос:

Я новичок в nodejs и создаю свое веб-приложение. Я использую 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 })
    }
   

})
 

Аутентификация с использованием паспортных данных

 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 существует в запросе. Итак, может ли хакер добавить пустого пользователя в запрос и получить доступ к моей странице администратора?

Это довольно странный вопрос, тхо. Есть ли лучший способ сделать это? Заранее спасибо 🙂

Комментарии:

1. Внешний интерфейс или пользовательская сторона-это дикие джунгли Интернета. Никогда не доверяй тому, что исходит оттуда. Всегда выполняйте проверки и проверки.

Ответ №1:

Конечный пользователь(в вашем случае хакер) может добавить любой тип данных в любой запрос. Так что да, конечный пользователь может изменять запросы для отправки запроса.пользователь в нем. Однако они не смогут получить доступ к данным в нем, и их запрос не будет принят на вашей конечной точке «администратор», если вы используете req.isAuthenticated() .

Это связано с тем, что passport JS сериализует пользователя и сохраняет информацию в сеансе после шифрования. Поэтому, если конечный пользователь (хакер) не получит доступ к компьютеру другого пользователя и не скопирует все данные сеанса (браузер не разрешает другим сайтам получать доступ к сеансу других сайтов) из своего браузера и не будет использовать его, он не сможет использовать администратора.

TLDR;

Нет, они не смогут получить доступ к конечной точке «администратор», просто добавив имя пользователя в свой запрос.