← Voltar para o Fechou!
Segurança do Fechou!
Varredura de dez classes de vulnerabilidade sobre todo o código, feita por ferramenta.
Abaixo, o que continua aberto e o que já foi fechado.
Sobre a expectativa de um vigia automático: o Fechou! é um site estático mais o Firebase.
Não existe servidor próprio onde um programa possa vigiar tráfego e bloquear ataque em tempo real.
O que protege um produto assim é blindagem em camadas, verificável, e é o que está listado aqui.
Em aberto
0Crítica
1Alta
0Média
0Baixa
3Informação
AltaAbuso
Sem verificação de aplicativo legítimo
Nada impede que alguém chame o seu banco de fora do produto, usando a chave pública.
nenhuma chamada de App Check
Risco: Um roteiro automatizado pode criar milhares de contas e encher o banco, elevando custo e sujando a base.
Correção: Ativar o Firebase App Check com reCAPTCHA, que é gratuito e não exige plano pago.
InformaçãoBanco
Coleção com leitura pública
A coleção de orçamentos compartilhados por link é legível sem login, por desenho.
match /publicos/{token}
Risco: Quem descobrir um endereço vê o orçamento. O endereço tem 22 caracteres sorteados, o que torna adivinhação inviável.
Correção: Já restrito: a escrita pública só muda o status, uma vez, saindo de enviado.
InformaçãoDados locais
1 itens guardados no navegador
O que o produto guarda fora da sessão.
fechou-lateral
Risco: Nenhum contém dado pessoal, senha ou identificador de sessão. São preferências de tela.
Correção: Manter assim: identidade fica com o Firebase, não com o produto.
InformaçãoSegredos
Chave de API do Firebase visível no código
Ela é pública por natureza e não concede acesso a nada sozinha.
dados.js
Risco: Quem protege os dados são as regras de segurança, não o sigilo da chave.
Correção: Nenhuma ação. Confundir isso com vazamento é erro comum.
Já fechado
✓
Cadeia de fornecimentoBibliotecas de PDF trazidas para dentro
O jsPDF e o plugin de tabela vinham de servidor de terceiro a cada carregamento, sem conferência. Desde a 0.39 vivem em vendor/, e nenhum código externo executa no produto.
✓
Injeção de conteúdoLogo conferida antes de virar imagem
O campo é gravado pelo usuário e reinserido em nove lugares, um deles a página pública. Só passa data:image/ em base64, com teto de peso, e a regra do banco recusa o resto antes de gravar.
✓
Injeção de conteúdo124 pontos passam por escape
Identificadores, cores e textos que entravam no HTML sem tratamento. A varredura não encontra mais nenhum.
✓
CabeçalhosSete cabeçalhos de segurança
Política de conteúdo listando as origens permitidas, proibição de ser embutido em outro site, conexão cifrada obrigatória por um ano, e mais quatro.
✓
BancoRegras endurecidas
Isolamento por conta, plano protegido, contador que não retrocede, teto de tamanho, logo validada, escrita pública limitada a dois campos, e negação de todo caminho não declarado.
✓
AcessoEspera crescente a cada erro de senha
Terceiro erro espera 5 segundos, quinto espera 1 minuto, sétimo espera 5 minutos.
✓
AcessoSessão encerra sozinha
Quatro horas sem uso, com aviso antes. Protege o caso real: sistema aberto no computador da obra.
✓
GolpeRecusa rodar dentro de outro site
Se o Fechou! for carregado num quadro em página falsa, ele para e mostra o endereço oficial.
✓
AutenticaçãoSenha mínima de oito com mistura obrigatória
E recusa as doze senhas mais usadas no Brasil.
✓
NavegaçãoQuatro aberturas de aba isoladas
A página de destino não consegue trocar o endereço da sua.
Gerada em 31 de julho de 2026, sobre a versão 0.53, pela ferramenta docs/seguranca.py.
Para a auditoria geral de código, veja o relatório de auditoria.