Atualização Automatica dos numeros e correção de erro e falha de segurança

This commit is contained in:
2026-07-06 17:31:58 -03:00
parent 89b12fc91b
commit 96b7b03f57
16 changed files with 352 additions and 15 deletions

View 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

View File

@@ -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 é 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