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
POSTpara 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
- Geração: O Laravel gera um Token CSRF único para cada sessão ativa do usuário.
- Sessão: Este token é armazenado na sessão do usuário (servidor).
- 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).
- Crie a Meta Tag (no
<head>do seu HTML):HTML<meta name="csrf-token" content="{{ csrf_token() }}"> - 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:
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:















