#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;
Нет, они не смогут получить доступ к конечной точке «администратор», просто добавив имя пользователя в свой запрос.