## Contexto Segurança precisa estar na fundação: o sistema guarda dados pessoais de participantes e credenciais de gateway. ## Escopo - [ ] Rate limiting por rota sensível (login, recuperação de senha, checkout, webhooks) com limites configuráveis - [ ] Headers de segurança (HSTS, `X-Content-Type-Options`, `Referrer-Policy`, `Permissions-Policy`, CSP para as páginas servidas pelo backend) - [ ] CORS restrito aos domínios dos fronts, configurável por ambiente - [ ] Validação de entrada sempre por `FormRequest` ou `Data` objects, nunca `$request->all()` - [ ] Logs estruturados em JSON com `request_id`, sem dados pessoais nem segredos - [ ] Endpoint de saúde `/up` com verificação de banco e Redis - [ ] Integração opcional com Sentry, desligada por padrão - [ ] Política para segredos: nada no repositório, `.env` por ambiente ## Critérios de aceite - [ ] Teste automatizado confirma 429 após exceder o limite de tentativas de login - [ ] Teste automatizado confirma presença dos headers de segurança - [ ] Nenhum log contém senha, token ou chave de gateway (teste com amostra) ## Notas técnicas - Revisar `config/cors.php` e `config/session.php` para a combinação Bearer token mais SPA - Registrar em ADR a política de segredos ## Depende de - #3 ## Definição de pronto - [ ] Testes passando na CI - [ ] Lint e análise estática sem erros - [ ] Documentação atualizada (OpenAPI via Scramble no backend, ou README do módulo no front) - [ ] Revisado por pelo menos uma pessoa
Activity
tecrodrigocastro commentedon Nov 5, 2026
Fechada no PR #90 (merged):
.envCORS_ALLOWED_ORIGINS, expõeX-Request-Id$request->all()request_id, redação automática de password/token/secret/cartão/upfora do grupoweb, checando banco e Redis de verdade (503 com detalhe se algo cair)docs/adr/0006-politica-de-segredos.mdcomposer check(48 testes) ecomposer auditpassam. Marcando como Done.