Aula 11 - Segurança em Aplicações Web 🛡️
🎯 Objetivo da Aula
Entender as principais vulnerabilidades da web (OWASP Top 10) e como o Laravel nos protege "out of the box". Vamos aprender a configurar proteções contra CSRF, XSS e SQL Injection, além de boas práticas de hash de senhas.
💣 Vulnerabilidades Comuns
1. CSRF (Cross-Site Request Forgery)
Um ataque que força um usuário autenticado a executar ações indesejadas. - Como o Laravel resolve: Através do middleware de verificação de Token CSRF (@csrf).
2. XSS (Cross-Site Scripting)
Injeção de scripts maliciosos em páginas visualizadas por outros usuários. - Como o Laravel resolve: O Blade escapa automaticamente qualquer conteúdo exibido com {% raw %}{{ $variavel }}.
3. SQL Injection
Injeção de comandos SQL através de campos de entrada. - Como o Laravel resolve: O Eloquent e o Query Builder usam prepared statements (PDO), tornando a injeção impossível.
📊 Ciclo de Proteção do Laravel
graph TD
A[Usuário Externo] --> B{Firewall/WAF}
B --> C{Laravel Middleware}
C -->|Check CSRF| D[Controller]
D -->|Hash Senhas| E[Banco de Dados]
D -->|Escape HTML| F[Interface View] 🔑 Gerenciamento de Senhas
Nunca salve senhas em texto puro! O Laravel utiliza o algoritmo Bcrypt ou Argon2 por padrão.
use Illuminate\Support\Facades\Hash;
// Criando o Hash
$password = Hash::make('minha-senha-segura');
// Verificando
if (Hash::check('minha-senha-segura', $hashedPassword)) {
// Senha correta
}
🛡️ Boas Práticas OWASP
- HTTPS em tudo: Use o middleware
App::forceScheme('https')em produção. - Headers de Segurança: Configure headers como
X-Frame-OptionseContent-Security-Policy. - Throttling: Limite o número de tentativas de login para evitar ataques de força bruta.
🧠 Blocos de Destaque
Atenção: Exposição de Dados
Nunca deixe a variável APP_DEBUG=true no seu arquivo .env em ambiente de produção. Isso pode expor senhas de banco e chaves de API em caso de erro.
🛠️ Exercícios Progressivos
- Básico: Tente enviar um formulário POST sem o
@csrfe observe o erro 419. - Intermediário: Use a função
Hash::makepara criar 3 senhas diferentes e tente compará-las manualmente. - Desafio: Implemente um "Rate Limiter" em uma rota de contato para que o mesmo IP só possa enviar 1 mensagem a cada minuto.
🚀 Mini-Projeto da Aula
Auditoria de Segurança: Pegue um projeto anterior e aplique um "Checklist de Segurança": esconda campos sensíveis nos Resources, ative o Rate Limiting nas APIs, garanta que todas as senhas sejam hasheadas e verifique se o modo debug está desativado simulando um ambiente de produção.