Ir para o conteúdo
Acecore

Entrega segura de sites estáticos com Cloudflare Pages

by Gui
Índice
Entrega segura de sites estáticos com Cloudflare Pages

Cloudflare Pages é a plataforma ideal para hospedagem de sites estáticos. Neste artigo, apresentamos a configuração real de deploy e as configurações de segurança usando o arquivo _headers.

Configuração de deploy: Por que saímos do Worker e voltamos ao Pages

Inicialmente, planejávamos processar o backend do formulário de contato com Cloudflare Worker. Com Worker, é possível enviar e-mails e fazer validação no server-side.

No entanto, ao configurar na prática, encontramos os seguintes desafios:

  • Complexificação do build: Configurações adicionais necessárias para servir a saída do build do Astro via Worker
  • Trabalho de debug: Diferenças de comportamento entre wrangler dev local e produção
  • Controle de cache: Pages tem integração mais natural com o CDN Cloudflare

Finalmente, utilizando um serviço externo chamado ssgform.com para o formulário de contato, eliminamos completamente o processamento server-side. Com isso, não havia mais necessidade do Worker e pudemos fazer deploy no Pages como um site puramente estático.

Configuração de segurança via _headers

No Cloudflare Pages, os cabeçalhos de resposta HTTP podem ser escritos no arquivo public/_headers. A seguir, um trecho das configurações realmente utilizadas.

Content-Security-Policy (CSP)

CSP é um cabeçalho importante para prevenir ataques de Cross-Site Scripting (XSS). Especifica em formato de whitelist as origens permitidas para busca de recursos.

Content-Security-Policy: default-src 'self';
  script-src 'self' 'unsafe-inline' https://challenges.cloudflare.com https://pagead2.googlesyndication.com;
  style-src 'self' 'unsafe-inline';
  img-src 'self' https://wsrv.nl https://images.unsplash.com data:;
  connect-src 'self' https://challenges.cloudflare.com https://pagead2.googlesyndication.com;
  frame-src https://challenges.cloudflare.com https://googleads.g.doubleclick.net;
  form-action https://ssgform.com;

Os pontos principais são:

  • script-src: Permite Cloudflare Turnstile (challenges.cloudflare.com) e AdSense
  • img-src: Permite o proxy de imagens wsrv.nl e Unsplash
  • form-action: Restringe envio de formulário apenas para ssgform.com
  • frame-src: Permite iframe do Turnstile e frame de anúncios do AdSense

Outros cabeçalhos de segurança

X-Content-Type-Options: nosniff
X-Frame-Options: DENY
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: camera=(), microphone=(), geolocation=()
  • X-Content-Type-Options: Previne MIME sniffing
  • X-Frame-Options: Proíbe embedding em iframe como medida contra clickjacking
  • Referrer-Policy: Envia apenas a origem em requisições cross-origin
  • Permissions-Policy: Desabilita APIs do navegador desnecessárias (câmera, microfone, geolocalização)

Controle de cache

Assets estáticos recebem cache de longa duração, enquanto HTML recebe cache curto.

/_astro/*
  Cache-Control: public, max-age=31536000, immutable

/*.html
  Cache-Control: public, max-age=3600

Os arquivos no diretório _astro/ gerado pelo Astro contêm hash de conteúdo no nome, então cache immutable de 1 ano é seguro. HTML tem alguma frequência de atualização, então mantém cache de 1 hora.

Configuração de deploy do Pages

A configuração do projeto Cloudflare Pages é simples:

ItemConfiguração
Comando de buildnpx astro build
Diretório de saídadist
Versão do Node.js22

Conectando o repositório GitHub, o deploy automático é feito a cada push para o branch main. Deploy de preview também é gerado automaticamente para cada PR, facilitando o review.

Conclusão

O importante é avaliar se “o processamento server-side é realmente necessário”. Com o uso de serviços externos, foi possível eliminar o Worker, resultando em deploy e gerenciamento de segurança mais simples. A configuração de CSP via _headers dá trabalho no início, mas uma vez escrita, se aplica a todas as páginas, sendo uma medida de segurança com excelente custo-benefício.

Evolução da configuração de deploy

Configuração inicial

Entrega de site estático com Cloudflare Pages.

Migração para Worker

Migração para Worker para processamento de formulário de contato.

Retorno ao Pages

Adoção de serviço externo de formulário para retornar ao estático.

Reforço de segurança

Configuração de CSP e cabeçalhos de segurança via _headers.

Perguntas frequentes
Devo escolher Cloudflare Pages ou Workers?
Para sites estáticos que não precisam de processamento server-side, Pages é ideal. A integração com CDN é seamless e o deploy é simples. O processamento de formulários pode ser substituído por serviços externos.
Quais cabeçalhos de segurança devem ser configurados no arquivo _headers?
Content-Security-Policy, X-Frame-Options, X-Content-Type-Options, Referrer-Policy e Permissions-Policy são os básicos. O CSP deve ser ajustado conforme os recursos externos utilizados pelo site.
Como permitir AdSense ou Analytics na configuração do CSP?
Adicione os domínios googletagmanager.com ou googlesyndication.com ao script-src. Dependendo do caso, também pode ser necessário permitir domínios relacionados em img-src e connect-src.
G

Gui

CEO da Acecore. Engenheiro versátil que trabalha com desenvolvimento de sistemas, produção web, operações de infraestrutura e educação em TI. Gosta de resolver desafios organizacionais e humanos por meio da tecnologia.

Desenvolvimento de sistemas Produção web Operações de infraestrutura Educação em TI

Quer saber mais sobre nossos serviços?

Oferecemos suporte abrangente em desenvolvimento de sistemas, design web, design gráfico e educação em TI.

Artigos relacionados

Pesquisar artigos