Como um login funciona, no código:
- Usuário envia e-mail + senha.
- Servidor busca o usuário, calcula o hash da senha enviada e compara com o hash guardado (nunca compara a senha em texto).
- Se bate, cria uma sessão: devolve um cookie ou um JWT que prova, nas próximas requisições, que você está logado.
🔒 Os erros clássicos (que você vai reconhecer no código):
- Hash rápido (SHA-256/MD5) em vez de bcrypt/argon2 → senha quebrável (Ex. 28).
- Comparação de hash não em tempo constante → timing side-channel (Ex. 28).
- JWT sem validar
exp/role, ou com segredo fraco/hardcoded (Ex. 4/12). - Cookie sem
HttpOnly/Secure/SameSite(Ex. 10). - Decisão de "é admin?" no client, não no servidor (Ex. 7).