Skip to content

B05 · Segurança base e observabilidade #7

Closed

Description

@tecrodrigocastro

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

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

  1. moved this from Todo to In Progress in PHPeste Platformon Nov 5, 2026
  2. moved this from In Progress to Done in PHPeste Platformon Nov 5, 2026
  3. tecrodrigocastro commented on Nov 5, 2026

    @tecrodrigocastro
    MemberAuthor

    Fechada no PR #90 (merged):

    • Rate limiting nomeado (login/password-reset por IP+e-mail, checkout/webhooks por IP), limites via .env
    • Headers de segurança globais (CSP, HSTS, X-Content-Type-Options, Referrer-Policy, Permissions-Policy)
    • CORS restrito por CORS_ALLOWED_ORIGINS, expõe X-Request-Id
    • Arch test: nenhum controller usa $request->all()
    • Logs em JSON com request_id, redação automática de password/token/secret/cartão
    • /up fora do grupo web, checando banco e Redis de verdade (503 com detalhe se algo cair)
    • Sentry instalado, desligado por padrão
    • docs/adr/0006-politica-de-segredos.md

    composer check (48 testes) e composer audit passam. Marcando como Done.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Type

No type

Projects

Relationships

None yet

Development

No branches or pull requests

Issue actions