Verificamos nossos próprios sites com KENSAI e encontramos lacunas críticas de conformidade com NIS2. A falta dos cabeçalhos de segurança HTTP trouxe dois de nossos três domínios para a Classe B (0.786). Aqui está exatamente o que estava errado, quais artigos NIS2 estavam em risco e como os minutos de configuração do Caddy 30 consertaram tudo.
Construímos uma plataforma de verificação de segurança. Pregamos a conformidade com NIS2 aos nossos clientes. E então executamos KENSAI em nossos próprios domínios – e descobrimos que dois em cada três não eram compatíveis.
Sem vulnerabilidades, sem violações. Faltam apenas os cabeçalhos de segurança HTTP – o tipo de lacuna silenciosa que os reguladores verificam primeiro e os invasores exploram depois. De acordo com a Diretiva NIS2 (Art. 21, §2), esses cabeçalhos não são opcionais para entidades regulamentadas. Eles são um requisito básico de higiene.
Aqui está o que encontramos e com que rapidez o corrigimos.
Executamos a verificação automatizada de conformidade NIS2 do KENSAI em todos os três domínios do portfólio em março 15, 2026:
kensai.app obteve pontuação quase perfeita em 0.997 porque já estava executando a configuração correta do cabeçalho Caddy. Os outros dois domínios - brnz.ai e codeforceai. com – ambos estavam em 0.786, cada um sem os mesmos seis cabeçalhos críticos de segurança.
Seis cabeçalhos de resposta HTTP estavam ausentes em ambos os domínios com falha. Cada um mapeia diretamente aos requisitos da Diretiva NIS2:
| Cabeçalho ausente | Propósito | Referência NIS2 | Status |
|---|---|---|---|
Strict-Transport-Security |
Força HTTPS, evita ataques de downgrade de protocolo | Arte. 21(2)(h) — Comunicações seguras | ✗FALTA |
Content-Security-Policy |
Bloqueia XSS, injeção de código, exfiltração de dados | Arte. 21(2)(d) — Segurança da cadeia de suprimentos | ✗FALTA |
X-Frame-Options |
Evita ataques de clickjacking/reparação de UI | Arte. 21(2)(b) — Prevenção de incidentes | ✗FALTA |
X-Content-Type-Options |
Impede ataques de detecção de MIME | Arte. 21(2)(b) — Higiene cibernética básica | ✗FALTA |
Referrer-Policy |
Controla o vazamento de dados de referência para terceiros | Arte. 21(2)(e) — Políticas de segurança de dados | ✗FALTA |
Permissions-Policy |
Restringe o acesso do navegador API (câmera, microfone, geolocalização) | Arte. 25 — Segurança desde o projeto | ✗FALTA |
Nós usamos Caddie como nosso proxy reverso. A correção foi um único e reutilizável header bloco que poderíamos aplicar a todos os domínios. Aqui está exatamente o que adicionamos:
# Global header snippet — add to all production sites
(security_headers) {
header {
# Force HTTPS — NIS2 Art. 21(2)(h): secure communications
Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
# Block XSS & injection — NIS2 Art. 21(2)(d): supply chain security
Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https://fonts.googleapis.com; style-src 'self' 'unsafe-inline' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' data: https:; connect-src 'self' https:; frame-ancestors 'none'"
# Prevent clickjacking — NIS2 Art. 21(2)(b)
X-Frame-Options "DENY"
# Stop MIME-sniffing — NIS2 Art. 21(2)(b)
X-Content-Type-Options "nosniff"
# Limit referrer leakage — NIS2 Art. 21(2)(e)
Referrer-Policy "strict-origin-when-cross-origin"
# Restrict browser APIs — NIS2 Art. 25: security by design
Permissions-Policy "camera=(), microphone=(), geolocation=(), payment=(), usb=(), interest-cohort=()"
# Remove server fingerprinting
-Server
-X-Powered-By
}
}
Em seguida, importamos o snippet para cada bloco do site:
# brnz.ai
brnz.ai, www.brnz.ai {
import security_headers
reverse_proxy localhost:3001
}
# codeforceai.com
codeforceai.com, www.codeforceai.com {
import security_headers
reverse_proxy localhost:3002
}
Recarregue o Caddy, verifique os cabeçalhos no DevTools do navegador, pronto:
caddy reload --config /etc/caddy/Caddyfile
Espera-se que cada entidade regulamentada por NIS2 tenha cabeçalhos de segurança básicos HTTP em vigor. Os reguladores realizam cada vez mais verificações automatizadas durante as auditorias. Uma falta Strict-Transport-Security cabeçalho não é uma omissão menor - é evidência de gestão de risco inadequada nos termos do Art. 21(2).
Construímos ferramentas de compliance e ainda tínhamos dois sites de grau B. Isso não é constrangedor – é um lembrete de que ocorrem desvios de configuração. Um domínio iniciado rapidamente, um Caddyfile que não foi sincronizado, uma importação ausente. A verificação automatizada detecta o que as auditorias manuais deixam passar.
Seis cabeçalhos faltando. Trinta linhas de configuração Caddy. Trinta minutos de trabalho. A diferença entre a nota B e a nota A não é um projeto de um mês – é uma tarde. A parte difícil é saber que a lacuna existe em primeiro lugar.
Ao extrair os cabeçalhos em um (security_headers) snippet, qualquer novo domínio que adicionarmos obtém automaticamente cobertura completa do cabeçalho NIS2, incluindo um único import linha. A conformidade torna-se o padrão, não uma reflexão tardia.
Se você estiver sob NIS2 – ou se preparando para uma auditoria – seus cabeçalhos de segurança HTTP são uma das primeiras coisas que os reguladores verificam. Eles são rápidos de verificar, inequívocos de avaliar e fáceis de corrigir. Não há desculpa para uma nota B quando uma nota A leva 30 minutos.
Execute a verificação. Leia o relatório. Corrija o que está sinalizado. Digitalize novamente para confirmar.
Execute a mesma verificação que executamos em nossos próprios domínios. Obtenha seu grau de conformidade NIS2, veja exatamente quais cabeçalhos estão faltando e obtenha um relatório de correção no qual você pode agir imediatamente.
Inicie a verificação gratuita do NIS2 →🛡️ O seu site é seguro?
Descubra vulnerabilidades antes que os invasores o façam.
Digitalize seu site gratuitamente →