Documento de referência das medidas de segurança aplicadas.
SecurityHeadersMiddleware).X-Content-Type-Options: nosniff.Support/Csp).script-src 'self' 'nonce-<hash>'style-src 'self' 'nonce-<hash>'frame-ancestors 'self', form-action 'self', base-uri 'self'unsafe-inline) — CSP_STRICT=false implicitamente.X-Frame-Options: SAMEORIGIN (anti-clickjacking).Referrer-Policy: strict-origin-when-cross-origin.Permissions-Policy bloqueando geolocalização/microfone/câmera.HttpOnly, SameSite=Lax, Secure sob HTTPS.SESSION_LIFETIME).password_hash() com PASSWORD_DEFAULT (bcrypt).usuario_id (BaseRepository).AuthMiddleware / GuestMiddleware protegem as rotas.RequireTwoFactorMiddleware para defesa em profundidade./admin/* restrito por perfil admin ou ADMIN_USER_IDS.ATTR_EMULATE_PREPARES=false).audit_log (create/update/delete com diff).senha, senha_hash, password,token, token_hash, secret, backup_codes.Support/WebhookSignature).(origem, id_externo)./webhooks/* isentas de CSRF (HMAC substitui).logs/app.log ou logs/app.jsonl com rotação por tamanho.logs/email.log no driver log.storage/rate-limit/.public/assets/.<style> / <script> inline devem usar nonce.csp_nonce().| Vetor | Mitigação |
|---|---|
| XSS | CSP com nonce, esc() em todas as views |
| CSRF | CsrfMiddleware global (exceto /webhooks/*) |
| SQL Injection | PDO + prepared statements |
| Timing attack (login) | Comparação com hash dummy |
| Brute force | Rate limit + bloqueio temporário |
| Session fixation | Regeneração no login |
| Clickjacking | X-Frame-Options: SAMEORIGIN |
| Mixed content | CSP + HTTPS obrigatório |
| Enumeração de usuários | Mensagem genérica em login e reset |
| Vazamento entre contas | Isolamento por usuario_id |
| Webhook spoofing | HMAC + deduplicação |
| Job injection | Handler registrado por classe |
APP_DEBUG=falseAPP_ENV=production.env fora do versionamento e inacessível pela weblogs/ e storage/ com permissão 775bin/backup.sh no cron diário/health retornando okfor i in {1..7}; do curl ...; done)WEBHOOK_ALLOW_UNSIGNED=false (produção)ADMIN_EMAILS configurado para alertas/perfil/2faUPDATE usuarios SET ativo = 0).SELECT * FROM audit_log WHERE usuario_id = X ORDER BY created_at DESC;storage/rate-limit/ e logs/app.jsonl.docs/INCIDENTES.md.| Segredo | Onde | Frequência |
|---|---|---|
MAIL_PASSWORD |
.env |
Anual ou após vazamento |
WEBHOOK_*_SECRET |
.env |
Semestral |
WEBHOOK_META_VERIFY_TOKEN |
.env |
Semestral |
| Tokens de usuário | Banco | Ao pedido do usuário |
| Backup codes 2FA | Banco | Ao pedido do usuário |
/admin/alertas semanalmente./admin/webhooks para eventos com assinatura_valida=0.php bin/console alert:list para conferir deduplicação.