Files
Reem-Notas/public/422.html
victor ed44d5fd85 Correção de vazamento de dados nas páginas de erro e nos logs
Três problemas de exposição, todos com o mesmo efeito: dado interno saindo
para quem não deveria ver.

1. Painel de debug do Rails na tela do usuário
   O servidor sobe com RAILS_ENV=development (docker-compose.yml), e
   development tinha `consider_all_requests_local = true`. A página
   "Action Controller: Exception caught" mostra parâmetros, SESSÃO
   (session_id, _csrf_token, id do usuário logado), cookies, IP do cliente,
   caminho do servidor e o trace inteiro — para qualquer pessoa que
   provocasse um erro. Agora o detalhe depende de ERROS_DETALHADOS=true,
   que só é ligado na máquina de desenvolvimento.

2. Senha e PIN em texto puro no log
   Não existia filter_parameter_logging.rb neste projeto: toda senha do
   login, PIN de motorista e token do WhatsApp iam para log/ em texto
   puro — e log vai junto em backup e em suporte. Era o pior dos três,
   porque é permanente e não aparece na tela de ninguém.

3. Páginas de erro do usuário final
   Sem public/500.html, desligar o painel deixaria tela em branco. Criadas
   500/404/422 em português, sem CSS externo (precisam funcionar com a
   aplicação fora do ar).

Também sai do versionamento a pasta Erros/, com 16 páginas de debug salvas
do navegador. Não há cookie de sessão assinado nelas — ninguém entra no
sistema com o que está ali — mas há session_id, token CSRF, id de usuário e
IPs, que não têm por que estar no repositório.

Correção estrutural pendente: subir o servidor com RAILS_ENV=production
(production.rb já tem consider_all_requests_local=false e force_ssl=true).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-26 17:44:58 -03:00

30 lines
1.4 KiB
HTML

<!DOCTYPE html>
<html lang="pt-BR">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>Não foi possível concluir · Reem Transporte</title>
<style>
/* Sem CSS externo de propósito: esta página precisa funcionar mesmo quando
a aplicação está fora do ar (é o único caso em que ela aparece). */
body { margin:0; min-height:100vh; display:flex; align-items:center; justify-content:center;
background:#0a0a0a; color:#fff; font-family:Arial,Helvetica,sans-serif; padding:24px; }
.caixa { max-width:520px; text-align:center; }
.marca { color:#f97316; font-weight:bold; letter-spacing:.08em; font-size:14px; text-transform:uppercase; }
h1 { font-size:24px; margin:12px 0 8px; }
p { color:#9ca3af; font-size:16px; line-height:1.6; margin:0 0 8px; }
a { display:inline-block; margin-top:24px; background:#f97316; color:#000; font-weight:bold;
text-decoration:none; padding:14px 24px; border-radius:12px; }
</style>
</head>
<body>
<div class="caixa">
<p class="marca">Reem Transporte</p>
<h1>Não foi possível concluir</h1>
<p>A ação foi recusada por uma verificação de segurança.</p>
<p>Normalmente isso acontece quando a página ficou aberta tempo demais — recarregue e tente de novo.</p>
<a href="/">Voltar ao início</a>
</div>
</body>
</html>