Site

Proteção CSRF

Na v4, use o helper csrf() em formulários PHP. Não existe mais a diretiva :csrf.


Token CSRF

<?= csrf() ?>

Gera automaticamente <input type="hidden" name="_token" ...>.


Spoofing de método

Para PUT, PATCH e DELETE via POST:

<?= method('PUT') ?>
<?= method('PATCH') ?>
<?= method('DELETE') ?>

Exemplo completo

<form action="<?= to('user.settings.update') ?>" method="POST">
    <?= csrf() ?>
    <?= method('PUT') ?>
    <input type="text" name="display_name" value="<?= e(old('display_name')) ?>">
    <button type="submit">Atualizar</button>
</form>

API e webhooks

Rotas de API e webhooks não precisam de CSRF:

uri::post('/webhook/payment', [webhook_handler::class, 'handle'])
    ->name('webhooks.payment')
    ->without_csrf();
⚠️Segurança

Em webhooks, sempre valide a origem da requisição (assinatura, IP, etc.).


Boas práticas

  • Sempre csrf() em forms que alteram dados
  • Nunca delete via GET
  • Use method('DELETE') para remoção
  • API: grupo com without_csrf
  • Falha CSRF → HTTP 419