Pular para o conteúdo principal

Security hardening - 2026-08-07

O que foi feito

  • Credenciais sensíveis foram movidas para variáveis de ambiente e .env local.
  • Endpoints públicos de manutenção foram bloqueados para HTTP e substituídos por runner CLI.
  • Uploads críticos passaram a validar MIME, tamanho e extensão com regras centralizadas.
  • Logs de debug e backups não registram mais senhas em texto claro.
  • O shell principal do dashboard deixou de carregar jQuery via CDN e usa assets/js/cp-dom.js.
  • Consultas dinâmicas frágeis foram ajustadas com prepared statement e whitelist de ORDER BY.
  • Escopo de usuários agora prioriza setor antes de White Label.
  • Painel de estabelecimento (user_ec) não recebe senha temporária por e-mail; agora recebe token temporário de definição de senha.

Variáveis obrigatórias

Configure fora do repositório:

  • DB_HOST
  • DB_USERNAME
  • DB_PASSWORD
  • DB_DATABASE
  • MOVINGPAY_API_TOKEN
  • MOVINGPAY_API_CUSTOMER_ID
  • MOVINGPAY_ACCESS_TOKEN
  • MOVINGPAY_CUSTOMER_ID
  • METRICSPOT_SET_PASSWORD_URL

Rotação recomendada

Rotacione qualquer segredo que já tenha ficado versionado ou compartilhado:

  • Senha do banco MySQL atual.
  • Tokens MovingPay.
  • Credenciais SMTP/Evolution/Google Places cadastradas em preferências de conta, se tiverem sido expostas em logs antigos.

Depois da rotação, atualize apenas .env/variáveis de ambiente no servidor.

Validação feita

  • php -l nos arquivos PHP alterados em cada etapa.
  • node --check nos JS alterados da remoção de jQuery do shell.
  • Busca textual para confirmar remoção de envio de senha temporária nos endpoints criar-painel.php e reenviar-credenciais.php.

Pendências conscientes

  • O link METRICSPOT_SET_PASSWORD_URL precisa apontar para uma tela que consuma user_ec_password_resets.
  • Ainda existem páginas legadas que carregam jQuery diretamente; o shell principal já foi migrado, mas as páginas fora do shell devem ser removidas em lotes menores.
  • Alguns query() estáticos permanecem em rotinas de schema/diagnóstico; não foram alterados por serem baixo risco ou consultas DDL controladas.