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,1em 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 auditrodando 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.