Aula 16 – Projeto Final: Sistema de Autenticação Seguro 🎓
Parabéns por chegar até aqui! Nesta aula final, você vai consolidar tudo o que aprendeu construindo um sistema de autenticação completo, aplicando as boas práticas de cada aula anterior.
🎯 O Cenário
Você foi contratado para implementar o backend de autenticação de uma nova aplicação. O sistema precisa ser resistente às vulnerabilidades mais comuns e seguir os princípios de segurança estudados no curso.
🛠️ Requisitos do Projeto
Seu sistema (em Python ou JavaScript, à sua escolha) deve implementar:
- Cadastro de usuário (Aula 13): senha armazenada com hash + salt via
bcrypt(nunca em texto puro). - Login com verificação segura (Aula 13): comparação da senha usando a função apropriada da biblioteca de hash (nunca
==direto). - Autenticação multifator opcional (Aula 08): geração e verificação de código TOTP.
- Controle de acesso por papéis (Aula 08): pelo menos 2 papéis (
admin,usuario) com permissões diferentes. - Proteção contra força bruta (Aula 15): bloqueio temporário após N tentativas de login falhas.
- Logging seguro (Aula 15): registrar tentativas de login (sucesso/falha, IP, timestamp) sem nunca logar a senha.
- Prevenção de SQL Injection (Aula 12): se usar banco de dados, todas as consultas devem ser parametrizadas.
📊 Arquitetura Proposta
graph TD
A["Cliente"] -- "HTTPS - Aula 09" --> B["API de Autenticação"]
B --> C["Cadastro: bcrypt hash+salt - Aula 13"]
B --> D["Login: verifica hash + rate limiting - Aula 13/15"]
D --> E{"MFA habilitado?"}
E -- Sim --> F["Verifica codigo TOTP - Aula 08"]
E -- Nao --> G["Gera sessao/token"]
F --> G
G --> H["Controle de acesso por papel - Aula 08"]
D -.-> I["Log de tentativas (sem senha!) - Aula 15"] 💻 Ponto de Partida Sugerido (Python)
import bcrypt
import time
from datetime import datetime
usuarios = {} # em produção, seria um banco de dados real
tentativas_falhas = {} # controle de rate limiting
def cadastrar(usuario, senha, papel="usuario"):
hash_senha = bcrypt.hashpw(senha.encode(), bcrypt.gensalt())
usuarios[usuario] = {"hash": hash_senha, "papel": papel}
print(f"[LOG] Usuário '{usuario}' cadastrado às {datetime.now()}")
def login(usuario, senha_digitada):
if tentativas_falhas.get(usuario, 0) >= 5:
print(f"[LOG] Login BLOQUEADO para '{usuario}' - excesso de tentativas")
return False
dados = usuarios.get(usuario)
if dados and bcrypt.checkpw(senha_digitada.encode(), dados["hash"]):
tentativas_falhas[usuario] = 0
print(f"[LOG] Login OK para '{usuario}' às {datetime.now()}")
return True
tentativas_falhas[usuario] = tentativas_falhas.get(usuario, 0) + 1
print(f"[LOG] Login FALHOU para '{usuario}' às {datetime.now()} (tentativa {tentativas_falhas[usuario]})")
return False
Ponto de partida, não a solução completa
Este código cobre cadastro, login e rate limiting básico. Sua missão é completar os requisitos restantes: MFA, controle de acesso por papel e consultas parametrizadas (se usar banco de dados de verdade).
✅ Checklist de Entrega
- Senhas nunca armazenadas em texto puro
- Rate limiting funcionando (teste com 6+ tentativas erradas seguidas)
- Pelo menos 2 papéis com permissões diferentes implementadas
- Logs registram tentativas de login, mas nunca a senha digitada
- MFA (TOTP) implementado, mesmo que opcional para o usuário
- Testado com pelo menos 3 cenários: cadastro, login correto, login incorreto
🎨 Conclusão do Curso
Você percorreu uma jornada completa em Segurança e Criptografia — dos fundamentos da tríade CID até a construção de um sistema de autenticação real. Agora você sabe:
- Os fundamentos: confidencialidade, integridade, disponibilidade e como ameaças reais exploram suas falhas.
- A criptografia por trás de tudo: simétrica, assimétrica, hash, assinaturas digitais e certificados.
- Como aplicar na prática: em Python, JavaScript, e nas conexões TLS que protegem a Internet inteira.
- Como pensar como defensor: OWASP Top 10, gestão de senhas, LGPD, pentest e auditoria.
Segurança não é um destino, é um processo contínuo — continue praticando, mantenha-se atualizado sobre novas vulnerabilidades, e leve esses princípios para todo sistema que você construir daqui em diante! 🛡️