Proteção CSRF no Laravel

Laravel
Tempo de leitura: 4 minutos

Proteção CSRF no Laravel: O ataque Cross-Site Request Forgery (CSRF) é uma vulnerabilidade séria onde um invasor induz um usuário autenticado a realizar ações indesejadas em uma aplicação web confiável. O Laravel 12 implementa, por padrão, um mecanismo de proteção robusto baseado em tokens que neutraliza essa ameaça de forma eficaz.

Neste artigo, exploraremos o conceito de CSRF e como o Laravel utiliza Middlewares e Tokens criptográficos para proteger suas rotas.

1. 🚨 Entendendo o Ataque CSRF

O CSRF explora o fato de que os navegadores enviam automaticamente cookies de sessão (e, portanto, informações de autenticação) com cada requisição para um domínio específico.

  • Cenário de Ataque: Um usuário está logado em seu banco (site A). Ele visita um site malicioso (site B) criado pelo atacante. O site B contém um formulário (invisível) que envia uma requisição POST para o site A (o banco), solicitando, por exemplo, uma transferência.
  • Vulnerabilidade: Se o site A apenas verificar a autenticação (o cookie), ele processará a requisição maliciosa, pois parece vir de um usuário logado.

2. 🔑 Como o Laravel 12 Impede o CSRF: O Token

A proteção do Laravel baseia-se na ideia de que apenas a sua aplicação deve saber o valor de um Token CSRF secreto e dinâmico.

A. Geração e Armazenamento

  1. Geração: O Laravel gera um Token CSRF único para cada sessão ativa do usuário.
  2. Sessão: Este token é armazenado na sessão do usuário (servidor).
  3. Campo Oculto: O token também é injetado como um campo oculto (input type=”hidden”) em todos os formulários Blade ou via header em requisições AJAX.

B. O Middleware VerifyCsrfToken

Toda requisição que modifica o estado (POST, PUT, PATCH, DELETE) que passa pelo grupo de rotas web é interceptada pelo Middleware App\Http\Middleware\VerifyCsrfToken.

  • Verificação: O Middleware compara o token enviado na requisição (via campo ou header) com o token armazenado na sessão.
  • Rejeição: Se os tokens não coincidirem, o Middleware rejeita a requisição, retornando um erro HTTP 419 Page Expired (ou Token Mismatch), impedindo o ataque.

3. 🛠️ Implementando a Proteção (Blade e AJAX)

A. Em Formulários HTML (Blade Directive)

O método mais simples é usar a Blade Directive @csrf dentro do seu formulário.

HTML

<form method="POST" action="/transfer">
    @csrf <button type="submit">Transferir Fundos</button>
</form>

B. Em Requisições AJAX (Meta Tag e Header)

Para requisições JavaScript (AJAX), o token não é enviado automaticamente. Você deve incluí-lo no Header da requisição (X-CSRF-TOKEN).

  1. Crie a Meta Tag (no <head> do seu HTML):HTML<meta name="csrf-token" content="{{ csrf_token() }}">
  2. Configure o Cliente AJAX (Exemplo com jQuery, ou similar em Fetch/Axios):JavaScript// Define um header padrão para todas as requisições AJAX $.ajaxSetup({ headers: { 'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') } });

Com essa configuração, toda requisição AJAX POST/PUT/DELETE incluirá o token e passará na verificação.

4. 📝 Exceções à Verificação

Embora a proteção CSRF seja vital, certas rotas que recebem dados de fontes externas (como webhooks de terceiros, APIs de pagamento ou notificações) não terão o token de sessão do Laravel e, portanto, precisam ser excluídas da verificação.

Você define estas exceções no Middleware App\Http\Middleware\VerifyCsrfToken:

PHP

// app/Http/Middleware/VerifyCsrfToken.php
protected $except = [
    // Rotas de webhooks que não precisam de token CSRF
    'payment/hotmart/webhook',
    
    // Todas as rotas que começam com 'api/' também são excluídas
    // por padrão, pois rotas de API não usam sessões (stateless)
    // Se você estiver usando o grupo de rotas 'api', esta exclusão
    // não é estritamente necessária, mas é uma boa prática para
    // webhooks que caem no grupo 'web'.
];

✅ Conclusão Proteção CSRF no Laravel

Proteção CSRF no Laravel: A proteção CSRF é um recurso de segurança habilitado por padrão e gerenciado pelo Middleware VerifyCsrfToken. Ao garantir que o Token CSRF da sessão corresponda ao token enviado na requisição, o Laravel impede que requisições maliciosas enviadas de outros domínios sejam processadas, mantendo a integridade e a segurança das ações dos seus usuários autenticados. É fundamental usar a diretiva @csrf em todos os seus formulários Blade e configurar corretamente as requisições AJAX.

Mas antes de dominar o Laravel, se for o seu caso, toda jornada tem um início. Vamos entender quais são os conhecimentos básicos necessários para aproveitar ao máximo este poderoso framework. Para iniciar seus estudos no Laravel, você precisará dominar as seguintes tecnologias:

HTML
HTML
CSS
CSS
Javascript
JavaScript
SQL
SQL
Capa Curso PHP
PHP

E se você gosta do nosso conteúdo, não deixe de contribuir adquirindo os serviços e produtos dos nossos apoiadores e empresas que somos associados:

Hospedagem Hostinger
Ofertas Amazon
Amazon Prime
Author: Thiago Rossi
Com mais de 20 anos de jornada na tecnologia, minha trajetória evoluiu do ensino técnico à arquitetura de sistemas complexos. Hoje, foco minha expertise no desenvolvimento de soluções de Inteligência Artificial nativa e análise de dados públicos, utilizando o ecossistema PHP para transformar dados brutos em transparência e eficiência. Como autor e desenvolvedor, acredito na democratização do conhecimento. Essa visão resultou em uma biblioteca de mais de 530 artigos gratuitos, cobrindo desde a base do WebDev e Infraestrutura até os bastidores da indústria de Jogos e IA. No universo de Game Design, sou autor do livro "GDD – O Guia Definitivo" e documento ativamente meus processos através de DevLogs, unindo rigor técnico e criatividade em projetos desenvolvidos com GDevelop 5. Meu compromisso é conectar engenharia de ponta com as reais oportunidades do mercado de tecnologia.