O guia para leigos: como compartilhar relatórios e ferramentas em HTML com login por e-mail, código de acesso e trava de rede, sem programar e sem pagar servidor.
Ele foi escrito para quem cria ferramentas em HTML, com ou sem ajuda de IA, e precisa entregá-las a outras pessoas sem perder o controle.
Você não precisa saber programar. Precisa de um computador, um e-mail e cerca de uma hora. Ao final, terá uma ferramenta no ar, acessível somente por quem você autorizar, e um histórico de quem entrou.
| 1 | O dia em que o relatório “vazou” |
| 2 | As 4 formas de distribuir um HTML |
| 3 | Como funcionam as duas barreiras |
| 4 | Prepare o seu arquivo (auditoria em 5 minutos) |
| 5 | Cloudflare do zero, passo a passo |
| 6 | A segunda barreira: trava por rede |
| 7 | Rotina, erros comuns e casos reais |
| 8 | Seu plano de 7 dias (Sprint de 60 min + Rollout) |
Uma história comum, e o que ela ensina.
Marina passou duas semanas construindo, com ajuda de IA, um simulador de orçamento em HTML. Um arquivo só. O gestor carrega sua planilha, o navegador processa tudo e a ferramenta mostra cenários. Ficou excelente.
Na sexta-feira, ela precisou entregar a ferramenta para 30 gestores. E travou em uma pergunta:
Ela pensou em três saídas:
Marina não errou. Ela só não tinha um método. Este ebook é o método que ela precisava.
* Condição do plano gratuito da Cloudflare na data de criação deste ebook. Confirme a política atual no site da Cloudflare.
Cada uma resolve uma parte do problema. Só uma resolve tudo.
Rápido, mas o arquivo se espalha, as versões se misturam e ninguém sabe quem tem o quê.
URL pública. Qualquer pessoa com o link entra. Proteção forte costuma ser paga.
Muito seguro, porém lento e caro: semanas de trabalho da TI para cada nova ferramenta.
Login por e-mail + código único + trava de rede. Imediato e sem custo até 50 usuários*.
| Hosped. comum | Servidor interno | Cloudflare | ||
|---|---|---|---|---|
| Autenticação | Nenhuma | Login comum | Rede corporativa | E-mail + código + rede |
| Visão da TI | Não | Parcial | Sim | Sim |
| Custo | R$ 0 | US$ 20 a 300/mês | Horas internas | R$ 0* |
| Entrega | Imediata | Dias | Semanas | Imediata |
| Próximo HTML | Descontrole | Repete o esforço | Fila da TI | Modelo replicável |
_middleware.js (Capítulo 6, gratuito até 100.000 requisições/dia).Duas portas independentes antes da sua ferramenta.
A Cloudflare Access pede o e-mail e confere se ele está na lista de autorizados. Se estiver, envia um código de uso único para essa caixa de entrada. Só quem tem acesso ao e-mail consegue digitar o código. A sessão dura 24 horas.
Um pequeno programa (o “middleware”) confere o endereço de rede (IP) de quem chega. Se não for o da empresa, a resposta é “Acesso negado”, mesmo com e-mail e código válidos. Ele também adiciona selos de segurança nas páginas.
Aqui está o ponto mais importante: como o HTML é autocontido, os arquivos (CSVs, planilhas) que cada pessoa carrega são processados somente no navegador dela. Nada viaja, nada é guardado em servidor.
A blindagem começa dentro do HTML.
Um HTML autocontido carrega tudo dentro dele: visual, lógica e imagens. Não puxa nada de fora e não envia nada para fora. Teste simples: abra o arquivo sem internet. Se funciona igual, está no caminho certo.
Abra o arquivo no Bloco de Notas, aperte Ctrl + F e procure:
| Procure por | Significa | Faça |
|---|---|---|
fetch( · XMLHttpRequest | Chamadas de rede | O ideal é nenhuma. |
http:// · https:// | Recursos externos | Só aceite links de texto. |
senha · password · token | Credenciais esquecidas | Remova já. |
<script src= | Script de fora | Embuta no arquivo. |
minha-ferramenta/ ├── index.html ← sua ferramenta (renomeie para index.html) └── functions/ └── _middleware.js ← trava de rede (capítulo 6)
Nenhuma experiência prévia. Siga na ordem.
dash.cloudflare.com/sign-up.controladoria@suaempresa.com.br) e uma senha forte, evitando amarrar o ativo ao e-mail pessoal de um único analista.
orcamento-2026).index.html e clique em Implantar.orcamento-2026.pages.dev.
index.html simples escrito apenas “Em configuração”. Conclua a blindagem nos Passos 3 a 5 e só então suba o index.html definitivo com os dados reais. Assim, sua ferramenta real nasce 100% protegida desde o primeiro segundo.one.dash.cloudflare.com).minhaempresa).


.pages.dev, ative em seu projeto Pages o atalho Settings → Access policy para cobrir também os subdomínios de implantação (*.orcamento-2026.pages.dev) e confira em Access → Applications se o endereço de produção está listado. Sempre teste em janela anônima.Equipe autorizada. Action: Allow.@suaempresa.com.br).
meuip.com.br. Para alinhar com a TI sem gerar atrito, envie esta mensagem: “Time de TI, estamos homologando a distribuição interna de relatórios estáticos client-side (processamento 100% no navegador, sem banco de dados externo e com bloqueio CSP connect-src 'none') atrás de autenticação OTP no Cloudflare Zero Trust. Podem me informar nossos blocos de IP fixo de saída (IPv4 e prefixo IPv6) para restringirmos o acesso exclusivamente à nossa rede corporativa?”
Mesmo com e-mail válido, só entra quem estiver na rede autorizada.
Crie dentro da pasta da ferramenta uma pasta functions e, nela, um arquivo chamado _middleware.js com este texto. Troque apenas os IPs (IPv4 e prefixo IPv6) e o endereço oficial nas primeiras linhas.
// 1) TROQUE pelos IPs fixos ou prefixos de sub-rede (IPv4 e IPv6) da sua empresa // Aceita IP exato ("203.0.113.10"), sub-rede IPv4 ("198.51.100.") ou prefixo IPv6 ("2804:14c:80:") const REDES_PERMITIDAS = ["203.0.113.10", "198.51.100.", "2804:14c:80:"]; const HOST_OFICIAL = "orcamento-2026.pages.dev"; // ou "orcamento.suaempresa.com.br" export async function onRequest(context) { const url = new URL(context.request.url); const ip = (context.request.headers.get("CF-Connecting-IP") || "").trim(); const emailAutenticado = context.request.headers.get("Cf-Access-Authenticated-User-Email"); // 2) Impede bypass por URLs de preview e exige autenticação prévia na Barreira 1 if (HOST_OFICIAL && url.hostname !== HOST_OFICIAL && !emailAutenticado) { return new Response("Acesso negado: utilize o endereço oficial autenticado (403)", { status: 403 }); } // 3) Confere se o IP (IPv4 ou IPv6) é exato ou pertence ao bloco da empresa const autorizado = REDES_PERMITIDAS.some(regra => (regra.endsWith(".") || regra.endsWith(":")) ? ip.startsWith(regra) : ip === regra ); if (!ip || !autorizado) { return new Response("Acesso negado: rede não autorizada (403)", { status: 403 }); } // 4) Carrega a ferramenta + selos de segurança, isolamento e privacidade const r = await context.next(); const s = new Response(r.body, r); s.headers.set("X-Content-Type-Options", "nosniff"); s.headers.set("X-Frame-Options", "DENY"); s.headers.set("Referrer-Policy", "no-referrer"); s.headers.set("Permissions-Policy", "camera=(), microphone=(), geolocation=()"); s.headers.set("Cache-Control", "no-store, no-cache, must-revalidate"); s.headers.set("Content-Security-Policy", "default-src 'self' 'unsafe-inline' data: blob:; connect-src 'none'; object-src 'none'; base-uri 'self'; form-action 'none'; frame-ancestors 'none'"); return s; }
connect-src 'none' e form-action 'none' fazem o navegador proibir a ferramenta de enviar dados para a internet: a prova técnica de que os dados ficam com o usuário.
Se o HTML carrega fontes ou scripts de fora, a política vai bloqueá-los. O correto é embutir tudo no arquivo (capítulo 4).
Publique de novo (Criar nova implantação) e teste: dentro da empresa abre; no 4G do celular deve aparecer “Acesso negado (403)”.
REDES_PERMITIDAS. Para equipes remotas sem VPN com IP fixo, utilize a Barreira 1 combinada com validação de cabeçalho do Access.Ferramenta no ar é o começo da gestão.
Access → Applications → sua aplicação → Edit → Policies → adicione o e-mail. Vale na hora.
Remova o e-mail da política e use Revoke existing tokens para derrubar sessões abertas.
Workers e Pages → projeto → nova implantação com o novo index.html. O endereço não muda.
Zero Trust → Logs → Access: e-mail, data, hora, IP e resultado. Seu histórico para auditoria.
| Sintoma | Solução |
|---|---|
| Código não chega | Confira o e-mail na lista, olhe o spam/quarentena corporativa e peça novo código. |
| Abre sem pedir login | O endereço não está coberto pela aplicação ou é URL de preview. Vincule o hostname exato e teste em janela anônima. |
| 403 para quem devia entrar | O IP mudou ou saiu via IPv6. Confirme IPv4 e IPv6 em meuip.com.br e atualize a lista. |
| Página em branco | A política de segurança bloqueou algo externo. Embuta os recursos no HTML (capítulo 4). |
| Versão antiga aparece | Cache do navegador: aperte Ctrl + F5. |
Simulador de DRE e orçamento matricial distribuído a 30 gestores de centro de custo sem espalhar planilhas por e-mail.
Calculadora de mérito e faixas salariais restrita ao comitê executivo, com revogação de sessão em 1 clique.
Simulador de margem e desconto mínimo travado no IP da filial, protegendo a tabela de custos contra vazamentos.
Entrega de diagnósticos interativos a clientes com login por OTP e log nominal de leitura para o sócio.
60 minutos para colocar a primeira ferramenta no ar. 7 dias para padronizar a governança do setor.
_middleware.js e HTML definitivo). A tabela de 7 dias abaixo organiza a homologação corporativa com calma.| Dia | Tarefa |
|---|---|
| Dia 1 | Auditar o seu HTML (capítulo 4) e corrigir qualquer recurso externo ou credencial. |
| Dia 2 | Criar a conta Cloudflare funcional, ativar 2FA, cadastrar o 2º admin e publicar o HTML de teste (“Em configuração”). |
| Dia 3 | Ativar o Zero Trust Free, criar a aplicação Access e configurar a política de e-mails autorizados (Protocolo Zero Exposição). |
| Dia 4 | Subir o HTML definitivo, testar em janela anônima (e-mail autorizado e não autorizado) e validar a revogação de sessão. |
| Dia 5 | Levantar os blocos IPv4/IPv6 com a TI, publicar o _middleware.js e testar o bloqueio 403 pelo 4G do celular. |
| Dia 6 | Convidar 3 usuários-piloto (gestores de área) e coletar feedback de usabilidade e recebimento do PIN. |
| Dia 7 | Liberar para todos os gestores, conferir os logs de auditoria e documentar o processo (incluindo a Rota 2 para escala). |
| HTML autocontido | Arquivo único com tudo dentro, que funciona sem internet. |
| Zero Trust | Modelo em que ninguém entra sem provar quem é. |
| One-time PIN | Código de uso único enviado por e-mail. |
| IP | “Endereço” da sua conexão com a internet (IPv4 ou IPv6). |
| Middleware | Vigia que roda antes da ferramenta e aplica os selos CSP. |
| Deploy | Publicar ou republicar a ferramenta. |
No curso e kit HTML Blindado Pro você acompanha tudo em vídeo, com artefatos prontos para copiar e colar, modelos executivos e suporte para homologar a arquitetura junto à TI e à diretoria.
developers.cloudflare.com/cloudflare-one) antes de implantar em ambiente crítico. A segurança final também depende das boas práticas da sua organização, da auditoria do código-fonte e da governança contínua dos acessos descritas neste guia. Ícones: Lucide (lucide.dev), licença ISC.