Używam prostą funkcję middleware w moim express.js
aplikacji w celu sprawdzenia, czy użytkownik ma uprawnienia administratora:Czy weryfikowanie, czy użytkownik jest administratorem na podstawie pliku req.user, jest bezpieczne?
function isAdmin (req, res, next) {
if (req.user.admin)
return next();
res.redirect("/");
}
passport
jest używany do uwierzytelniania konta.
Czy to jest bezpieczne, czy może req.user.admin
zostać wstrzyknięte do żądania dla użytkowników, którzy nie powinni mieć uprawnień administratora? Czy powinienem najpierw znaleźć użytkownika, a następnie sprawdzić, czy dany użytkownik ma uprawnienia administratora? Na przykład:
function isAdmin (req, res, next) {
if (req.user) {
User.findOne({ "_id" : req.user._id }, function (err, user) {
if (err) {
throw err;
} else if (user.admin) {
return next();
} else {
res.redirect("/");
}
})
} else {
res.redirect("/");
}
}
Dla mnie wydaje się to niepotrzebnie skomplikowane. Powodowałoby to również dostęp do większej liczby baz danych. Czy konieczne jest sprawdzenie, czy użytkownik jest naprawdę administratorem, czy też moja pierwsza funkcja jest wystarczająca? W istocie, kto może zobaczyć lub zmienić req
, a tym samym req.user
?
To pytanie może być dla Ciebie istotne: http://stackoverflow.com/questions/24649274/authentication-with-passport-can-i-trust-that-req-user-is-indeed-the-logged-in – dylants