Pular para conteúdo

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-Options e Content-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

  1. Básico: Tente enviar um formulário POST sem o @csrf e observe o erro 419.
  2. Intermediário: Use a função Hash::make para criar 3 senhas diferentes e tente compará-las manualmente.
  3. 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.


Próxima Aula: Testes Automatizados