Segurança não é feature, é padrão. Em Laravel, a maior parte do trabalho é seguir as práticas que o framework já oferece — e não desabilitá-las por conveniência. Este é o checklist que aplicamos em todo projeto.

Mass assignment

Sempre declare $fillable (ou $guarded). Nunca use $guarded = [] em modelo que recebe input externo.

class Message extends Model
{
    protected $fillable = ['name', 'email', 'message'];
}

Validação com FormRequest

Mover regras para FormRequest separa validação de controller e torna as regras testáveis.

  • authorize() para checar permissão.
  • rules() para validar formato e limites.
  • messages() em PT-BR para o usuário final.

Escape no Blade

{{ }} escapa por padrão. Use {!! !!} só quando você controla o HTML — e mesmo assim, sanitize a entrada.

Rate limiting e CSRF

  • throttle:10,1 em rotas sensíveis (contato, login).
  • CSRF token em todos os formulários POST. Para APIs, Sanctum.

Secrets fora do repo

Nada de .env commitado. Secrets ficam no ambiente (ou em vault). composer audit no CI pega vulnerabilidades conhecidas nas dependências.

Headers e dependências

  • Headers de segurança (X-Content-Type-Options, Strict-Transport-Security, Content-Security-Policy).
  • composer audit rodando no pipeline.
  • Atualização recorrente do framework e das libs.

Segurança por padrão é menos sobre heroísmo e mais sobre disciplina: pequenos hábitos repetidos em cada commit.