2014-07-10 7 views
5

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?

+0

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

Odpowiedz

0

Nie jestem obeznany z paszportem, ale jeśli jest podobny do tego, jak działa express-session, obiekt req.session jest przechowywany w (potencjalnie zaszyfrowanym) pliku cookie, więc jeśli zbudujesz system uwierzytelniania z tego, możesz zapisać informacje o użytkowniku w req.session.user i być pewnym, że jest bezpieczny.

Powiązane problemy