Security hardening - 2026-08-07
O que foi feito
- Credenciais sensíveis foram movidas para variáveis de ambiente e
.envlocal. - 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_HOSTDB_USERNAMEDB_PASSWORDDB_DATABASEMOVINGPAY_API_TOKENMOVINGPAY_API_CUSTOMER_IDMOVINGPAY_ACCESS_TOKENMOVINGPAY_CUSTOMER_IDMETRICSPOT_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 -lnos arquivos PHP alterados em cada etapa.node --checknos 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.phpereenviar-credenciais.php.
Pendências conscientes
- O link
METRICSPOT_SET_PASSWORD_URLprecisa apontar para uma tela que consumauser_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.