【发布时间】:2013-07-19 08:58:53
【问题描述】:
将此代码放置在路由中是否足以保护页面免受未经身份验证的用户的攻击?
if (!req.user) return res.send(401, "Not allowed in");
【问题讨论】:
标签: javascript node.js express passport.js
将此代码放置在路由中是否足以保护页面免受未经身份验证的用户的攻击?
if (!req.user) return res.send(401, "Not allowed in");
【问题讨论】:
标签: javascript node.js express passport.js
只要您没有在某处泄漏路线就足够了。只需确保您的路线顺序正确。
//checks to be sure users are authenticated
app.all("*", function(req, res, next){
if (!req.user)
res.send(403);
else
next();
});
//additional routes will require authentication due to the order of middleware
app.get("/admin", ....
但是,如果您将管理路由移到全局路由之上,则管理路由将不再受到保护。例如,您可能想故意将您的登录页面放在更早的位置,这样它就不需要身份验证。
【讨论】:
您可以使用req.isAuthenticated() 来检查请求是否经过身份验证。
function ensureAuthenticated(req, res, next) {
if (req.isAuthenticated()) { return next(); }
res.redirect('/login')
}
app.get('/server', ensureAuthenticated, routes.server.get);
app.get('/login', routes.login.get);
或者像这样
app.all('*', function(req,res,next){
if (req.path === '/' || req.path === '/login')
next();
else
ensureAuthenticated(req,res,next);
});
【讨论】:
isAuthenticated() 完全没有记录。这就像图书馆的整个点。总有一天,我会找到这个 Jared Hanson 的家伙,送一架装有橡胶大手的无人机到他家,然后反复打他,因为他用 Passport 拖钓世界。谢谢。
更正user568109的答案,用express 4代码必须是这样的:
app.all('*', function(req,res,next) {
if (req.path === '/' || req.path === '/login')
next();
else
ensureAuthenticated(req,res,next);
});
【讨论】: