Atualização Automatica dos numeros e correção de erro e falha de segurança
This commit is contained in:
@@ -8,6 +8,16 @@ module ReemLogistica
|
||||
class Application < Rails::Application
|
||||
config.load_defaults 7.1
|
||||
|
||||
# Segurança de transporte — força HTTPS e cookies "Secure" quando
|
||||
# FORCE_SSL=true no .env. Fica em application.rb (e não só em
|
||||
# production.rb) para valer MESMO enquanto o deploy roda fora do modo
|
||||
# `production`. O Cloudflare termina o TLS e envia X-Forwarded-Proto=https;
|
||||
# assume_ssl evita loop de redirecionamento nesse cenário.
|
||||
if ENV["FORCE_SSL"] == "true"
|
||||
config.assume_ssl = true
|
||||
config.force_ssl = true
|
||||
end
|
||||
|
||||
# Timezone e idioma Brasil
|
||||
config.time_zone = "America/Sao_Paulo"
|
||||
config.i18n.default_locale = :'pt-BR'
|
||||
|
||||
@@ -5,7 +5,11 @@ Rails.application.configure do
|
||||
config.eager_load = true
|
||||
config.consider_all_requests_local = false
|
||||
|
||||
config.force_ssl = false # mude para true quando tiver HTTPS
|
||||
# HTTPS obrigatório: redireciona HTTP→HTTPS e marca cookies como "Secure".
|
||||
# assume_ssl faz o Rails confiar no TLS terminado no Cloudflare (que envia
|
||||
# X-Forwarded-Proto=https), evitando loop de redirecionamento.
|
||||
config.assume_ssl = true
|
||||
config.force_ssl = true
|
||||
config.log_level = ENV.fetch("RAILS_LOG_LEVEL", "info")
|
||||
config.log_tags = [:request_id]
|
||||
config.logger = ActiveSupport::Logger.new(STDOUT).tap { |l| l.formatter = ::Logger::Formatter.new }
|
||||
|
||||
60
config/initializers/content_security_policy.rb
Normal file
60
config/initializers/content_security_policy.rb
Normal file
@@ -0,0 +1,60 @@
|
||||
# config/initializers/content_security_policy.rb
|
||||
#
|
||||
# Content Security Policy (CSP) — defesa em profundidade contra XSS,
|
||||
# clickjacking e injeção de recursos externos.
|
||||
#
|
||||
# ⚠️ MODO REPORT-ONLY (por enquanto)
|
||||
# A política abaixo apenas REPORTA violações no console do navegador, sem
|
||||
# BLOQUEAR nada. Isso é proposital: o app carrega mapa (Leaflet + tiles),
|
||||
# gráficos (Chart.js), date-picker (Flatpickr), Tailwind e Google Fonts de
|
||||
# CDNs externos, e um bloqueio mal calibrado quebraria essas telas.
|
||||
#
|
||||
# COMO ATIVAR O BLOQUEIO DE VERDADE:
|
||||
# 1. Publique este arquivo e navegue por: /operacoes (painel), dashboard,
|
||||
# login por PIN, telas de motorista e relatórios.
|
||||
# 2. Abra o console do navegador (F12) e confirme que NÃO aparecem erros de
|
||||
# "Content-Security-Policy" / "Refused to load ...".
|
||||
# 3. Se aparecer algum host novo, adicione-o ao diretivo correspondente aqui.
|
||||
# 4. Troque a última linha para:
|
||||
# config.content_security_policy_report_only = false
|
||||
#
|
||||
Rails.application.configure do
|
||||
config.content_security_policy do |p|
|
||||
p.default_src :self
|
||||
p.base_uri :self
|
||||
p.object_src :none
|
||||
p.frame_ancestors :self # anti-clickjacking (reforça X-Frame-Options)
|
||||
p.form_action :self
|
||||
|
||||
# Scripts do app (self/inline) + CDNs usados:
|
||||
# cdn.tailwindcss.com → Tailwind (Play CDN, precisa de eval p/ o JIT)
|
||||
# cdn.jsdelivr.net → Chart.js, Flatpickr
|
||||
# unpkg.com → Leaflet, Leaflet.heat
|
||||
p.script_src :self, :unsafe_inline, :unsafe_eval,
|
||||
"https://cdn.tailwindcss.com",
|
||||
"https://cdn.jsdelivr.net",
|
||||
"https://unpkg.com"
|
||||
|
||||
# Estilos inline (Tailwind/estilos embutidos) + Google Fonts + CSS dos CDNs
|
||||
p.style_src :self, :unsafe_inline,
|
||||
"https://fonts.googleapis.com",
|
||||
"https://cdn.jsdelivr.net",
|
||||
"https://unpkg.com"
|
||||
|
||||
p.font_src :self, :data, "https://fonts.gstatic.com"
|
||||
|
||||
# Imagens: data/blob (QR base64, canvas dos gráficos), ícones do Leaflet e
|
||||
# tiles do mapa (ArcGIS World Imagery + OpenStreetMap).
|
||||
p.img_src :self, :data, :blob,
|
||||
"https://unpkg.com",
|
||||
"https://cdn.jsdelivr.net",
|
||||
"https://server.arcgisonline.com",
|
||||
"https://*.tile.openstreetmap.org"
|
||||
|
||||
p.connect_src :self
|
||||
end
|
||||
|
||||
# Enquanto validamos, apenas REPORTA (não bloqueia). Mude para false para
|
||||
# ativar o bloqueio — veja as instruções no topo deste arquivo.
|
||||
config.content_security_policy_report_only = true
|
||||
end
|
||||
@@ -1,8 +1,10 @@
|
||||
# Desliga o badge/caixa de tempo de resposta do rack-mini-profiler.
|
||||
# Reforço de segurança do rack-mini-profiler.
|
||||
#
|
||||
# A gem só é carregada no group :development; o `defined?` evita NameError em
|
||||
# produção (onde ela não existe). Para reativar durante uma investigação de
|
||||
# performance, comente este arquivo e reinicie o servidor.
|
||||
# A gem agora é carregada com `require: false` no Gemfile, então normalmente
|
||||
# `Rack::MiniProfiler` nem existe (nenhum cookie __profilin, nenhuma rota
|
||||
# /mini-profiler-resources). Se alguém a exigir manualmente para investigar
|
||||
# performance, este initializer garante que o profiler fique DESLIGADO por
|
||||
# padrão — habilite conscientemente durante a investigação.
|
||||
if defined?(Rack::MiniProfiler)
|
||||
Rack::MiniProfiler.config.enabled = false
|
||||
end
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
set :output, "log/cron.log"
|
||||
set :environment, ENV.fetch("RAILS_ENV", "production")
|
||||
|
||||
# A cada 1 hora — atualiza o valor estimado do dia
|
||||
every 1.hour do
|
||||
# A cada 30 min, das 08h às 18h — atualiza o valor estimado do dia.
|
||||
# (Depois de alterar, rode: bundle exec whenever --update-crontab)
|
||||
every "*/30 8-18 * * *" do
|
||||
rake "historico:atualizar"
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user