Segurança na web
Cabeçalhos, CSP, CORS, CSRF, cookie, limite de taxa e de corpo — o que o Kiln liga e o que é decisão sua.
O navegador tem defesas poderosas — e nenhuma vem ligada. Elas dependem de cabeçalhos que o servidor manda. O Kiln traz cada uma como middleware, e a lista abaixo é o mínimo de um site público.
dataforge
adopt Kiln
server site on 0:
middleware Kiln.rate_limit(60, 60) // 60 pedidos por minuto, por IP
middleware Kiln.body_limit(1048576) // 1 MB de corpo, no maximo
after Kiln.secure_headers() // nosniff, frame, CSP, referrer
route GET "/":
respond json {"ok": yes}
r := Kiln.test(site, "GET", "/")
assert r["headers"]["X-Frame-Options"] is "DENY"
assert r["headers"]["X-Content-Type-Options"] is "nosniff"
assert "default-src 'self'" in r["headers"]["Content-Security-Policy"]
out "os cabecalhos sairam"| Defesa | No Kiln | Contra |
|---|---|---|
X-Frame-Options / frame-ancestors | secure_headers(frame := …) | clickjacking: sua página num <iframe> de outro |
Content-Security-Policy | secure_headers(csp := …) | o XSS que escapou do escape — o script injetado não roda |
X-Content-Type-Options: nosniff | ligado | um .txt com HTML executado como página |
Strict-Transport-Security | secure_headers(hsts := yes) | o primeiro acesso por http interceptado |
| CORS com origem nomeada | Kiln.cors(["https://app.exemplo.com"]) | outro site lendo a resposta com o cookie do usuário |
| CSRF | Kiln.csrf(segredo) + csrf_token | o formulário de outro site postando no seu |
cookie HttpOnly, SameSite, Secure | Kiln.cookie(…) — HttpOnly e Lax por padrão | o script que lê a sessão; o POST de outra origem |
| limite de taxa e de corpo | rate_limit, body_limit | força bruta; o corpo de 2 GB que derruba o processo |
O rate_limit conta por processo: com três réplicas, o limite real é o triplo. Ver Kiln em produção.