Security Headers: Os Cabeçalhos HTTP Que 90% dos Websites Não Têm
O investimento de segurança mais barato que não estás a fazer
Visita o securityheaders.com e analisa o website da tua empresa. Se vires qualquer coisa abaixo de nota A, estás a falhar infraestrutura básica de segurança que custa exatamente zero euros a implementar e previne categorias inteiras de ataques.
Security headers são cabeçalhos de resposta HTTP que instruem o browser sobre como tratar o conteúdo. São o equivalente digital de trancar a porta de casa, trivialmente fácil, chocantemente eficaz, e inexplicavelmente ignorado pela grande maioria dos websites. Segundo a OWASP, cabeçalhos de segurança em falta permanecem no top 10 de vulnerabilidades de aplicações web, ano após ano.
A ironia é que implementá-los demora menos tempo do que ler este artigo. Um setup de Nginx, Apache ou Cloudflare corretamente configurado pode adicionar todos os security headers críticos em menos de 15 minutos.
Os cinco headers que cada website precisa
1. Strict-Transport-Security (HSTS)
O HSTS diz ao browser: “Nunca comuniques com este domínio por HTTP simples. Usa sempre HTTPS.” Sem HSTS, um atacante a fazer man-in-the-middle num Wi-Fi de café pode intercetar o pedido HTTP inicial antes de redirecionar para HTTPS e injetar conteúdo malicioso.
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
2. X-Frame-Options
Este header impede que o website seja embebido num <iframe> noutro domínio, o vetor primário para ataques de clickjacking.
X-Frame-Options: DENY
3. X-Content-Type-Options
Browsers historicamente tentavam “sniffar” o tipo MIME de um recurso, por vezes interpretando um ficheiro de texto como JavaScript executável. Este header desativa esse comportamento perigoso.
X-Content-Type-Options: nosniff
4. Content-Security-Policy (CSP)
O CSP é o header de segurança mais poderoso e mais complexo. Define uma whitelist de fontes de conteúdo que o browser está autorizado a carregar. Um CSP corretamente configurado torna ataques XSS virtualmente impossíveis.
Content-Security-Policy:
default-src 'self';
script-src 'self' https://cdn.example.com;
style-src 'self' 'unsafe-inline' https://fonts.googleapis.com;
img-src 'self' data: https://media.example.com;
font-src 'self' https://fonts.gstatic.com;
frame-ancestors 'none';
5. Referrer-Policy
Controla quanta informação de referrer é enviada ao navegar para fora do site.
Referrer-Policy: strict-origin-when-cross-origin
Como testamos: verificação de segurança automatizada
No x078, security headers não são um “nice to have”. são um gate de deployment. Cada website que entregamos é validado por uma suite de testes Playwright automatizada que corre antes de qualquer deployment chegar a produção:
// Excerto da nossa suite de testes de segurança
test.describe('Security Headers', () => {
test('cabeçalhos de resposta aplicam políticas de segurança', async ({ request }) => {
const response = await request.get('/');
const headers = response.headers();
const checks = [
{ header: 'x-frame-options', expected: /DENY|SAMEORIGIN/i, severity: 'critical' },
{ header: 'x-content-type-options', expected: /nosniff/i, severity: 'critical' },
{ header: 'referrer-policy', expected: /.+/, severity: 'warning' },
{ header: 'strict-transport-security', expected: /max-age=/, severity: 'critical' },
];
for (const check of checks) {
const value = headers[check.header];
if (check.severity === 'critical') {
expect(value).toBeTruthy();
if (value) expect(value).toMatch(check.expected);
}
}
});
});
Isto não é opcional. É uma verificação programática que corre em cada build, cada deployment, cada ambiente. Se um header falta, o deployment falha. A suite Playwright também testa:
- Flags de segurança de cookies: Cada cookie deve ter
Secure,HttpOnlye atributosSameSiteapropriados - Divulgação de informação em páginas de erro: Páginas 404 não devem vazar stack traces, versões de framework ou caminhos internos de ficheiros
- Tampering de métodos HTTP: Endpoints API devem rejeitar métodos HTTP inesperados (PUT, DELETE, PATCH) com respostas 405
Hardening ao nível do servidor
Para além dos headers HTTP, a nossa ferramenta de auditoria de segurança executa verificações abrangentes ao nível do servidor:
# Verificações de hardening do sistema
v-security-audit --system # Hardening de SO e serviços
v-security-audit --frontend URL # Scan externo de segurança HTTP
v-security-audit --pentest URL # Simulação de auto-ataque ofensivo
v-security-audit --all # Auditoria completa: sistema + backend + frontend + pentest
A auditoria de sistema verifica configuração SSH (autenticação só por chave, sem login root), regras de firewall, exposição de serviços, permissões de ficheiros e estado de atualizações de pacotes. O módulo de pentest corre simulações de ataque automatizadas (payloads XSS, injeção CRLF, tentativas de path traversal) contra o site live para verificar que as defesas aguentam sob condições adversariais.
O fix de 15 minutos
Se estás a correr Nginx, aqui está o bloco de configuração completo que implementa todos os cinco headers críticos:
# Adicionar ao bloco server no nginx.conf
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header X-Frame-Options "DENY" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; frame-ancestors 'none';" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;
Para utilizadores de Cloudflare, estes podem ser definidos via Transform Rules no dashboard sem tocar na configuração do servidor.
O investimento são 15 minutos de configuração. O retorno é imunidade a clickjacking, MIME-sniffing, downgrade de protocolo, e uma redução significativa da superfície de ataque XSS. Não há argumento racional para não os implementar. Analisa o teu site em securityheaders.com. Se a nota está abaixo de A, o fix está à espera.
O custo de não agir
Os security headers são configurações que demoram minutos a implementar e protegem contra classes inteiras de ataques. A maioria dos websites não os tem, não porque a implementação seja difícil, mas porque ninguém auditou a camada de segurança HTTP.
Corre um teste no securityheaders.com com o teu domínio. O resultado mostra exactamente o que falta. A correcção é técnica, rápida e mensurável.
Perguntas Frequentes
O que são security headers e porque importam?
Security headers são cabeçalhos de resposta HTTP que instruem o browser a aplicar políticas de segurança específicas. Previnem ataques comuns como clickjacking (X-Frame-Options), sniffing de MIME-type (X-Content-Type-Options), ataques de downgrade de protocolo (Strict-Transport-Security) e cross-site scripting (Content-Security-Policy). Custam zero a implementar e previnem categorias inteiras de ataques.
Como verifico se o meu website tem security headers adequados?
Visita securityheaders.com e introduz o teu domínio. A ferramenta analisa os cabeçalhos de resposta HTTP e classifica o site de A+ a F. Alternativamente, abre as ferramentas de developer do browser, visita o site e verifica os Response Headers no separador Network.
O Cloudflare adiciona security headers automaticamente?
O Cloudflare adiciona alguns headers por defeito (como HSTS básico se configurado), mas não adiciona automaticamente X-Frame-Options, Content-Security-Policy ou Referrer-Policy. Estes devem ser explicitamente configurados no dashboard do Cloudflare (Transform Rules) ou nos response headers do servidor de origem.
Os security headers podem partir o meu website?
Uma Content-Security-Policy (CSP) mal configurada pode bloquear scripts, styles ou fonts legítimos. Começa com CSP em modo report-only para identificar violações antes de aplicar. X-Frame-Options, X-Content-Type-Options e HSTS são seguros para deploy imediato sem risco de partir funcionalidade.
[ RELATED_NODES ]
> INICIAR_PROJETO
Precisa de um website que transmita confiança, apareça na pesquisa e dê mais força à sua presença digital? Comece a conversa aqui.