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>
37 lines
1.6 KiB
Ruby
37 lines
1.6 KiB
Ruby
require "active_support/core_ext/integer/time"
|
|
|
|
Rails.application.configure do
|
|
config.enable_reloading = true
|
|
config.eager_load = false
|
|
# ⚠️ SEGURANÇA — a página de debug do Rails ("Action Controller: Exception
|
|
# caught") mostra parâmetros, SESSÃO, cookies, IP do cliente, caminho do
|
|
# servidor e o trace inteiro. O servidor de teste/produção sobe com
|
|
# RAILS_ENV=development (docker-compose.yml), então esse painel estava indo
|
|
# para a tela de qualquer pessoa que provocasse um erro.
|
|
#
|
|
# Agora o detalhe só aparece quando ALGUÉM PEDE explicitamente, na máquina de
|
|
# desenvolvimento: `ERROS_DETALHADOS=true` no .env local. Sem a variável, o
|
|
# visitante recebe a página estática de public/500.html.
|
|
config.consider_all_requests_local = ENV['ERROS_DETALHADOS'] == 'true'
|
|
|
|
# Sem isso, com consider_all_requests_local=false o Rails ainda tentaria
|
|
# renderizar o painel para requisições vindas de localhost.
|
|
config.action_dispatch.show_exceptions = :all
|
|
|
|
config.server_timing = true
|
|
|
|
config.cache_store = :memory_store
|
|
config.active_storage.service = :local if defined?(ActiveStorage)
|
|
|
|
config.action_mailer.raise_delivery_errors = false
|
|
config.action_mailer.perform_caching = false
|
|
config.action_mailer.default_url_options = { host: ENV.fetch("APP_HOST", "localhost:3000") }
|
|
|
|
config.active_support.deprecation = :log
|
|
config.active_record.migration_error = :page_load
|
|
config.active_record.verbose_query_logs = true
|
|
|
|
config.assets.quiet = true if config.respond_to?(:assets)
|
|
config.hosts.clear # aceita qualquer host em dev (Docker/IP local)
|
|
end
|