Node.js 黑客可以修改发送到web服务器的请求吗?我正在根据请求中的对象对用户进行身份验证
我是nodejs的初学者,我正在创建我的web应用程序。我使用passportJs进行身份验证。如中所述,当用户成功通过身份验证时,将创建req.user,并可在任何路由中访问 我的管理员把手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('
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”端点。前端或用户端是互联网的丛林。永远不要相信来自那里的任何东西。始终执行检查和验证。