Pular para o conteúdo

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"
DefesaNo KilnContra
X-Frame-Options / frame-ancestorssecure_headers(frame := …)clickjacking: sua página num <iframe> de outro
Content-Security-Policysecure_headers(csp := …)o XSS que escapou do escape — o script injetado não roda
X-Content-Type-Options: nosniffligadoum .txt com HTML executado como página
Strict-Transport-Securitysecure_headers(hsts := yes)o primeiro acesso por http interceptado
CORS com origem nomeadaKiln.cors(["https://app.exemplo.com"])outro site lendo a resposta com o cookie do usuário
CSRFKiln.csrf(segredo) + csrf_tokeno formulário de outro site postando no seu
cookie HttpOnly, SameSite, SecureKiln.cookie(…)HttpOnly e Lax por padrãoo script que lê a sessão; o POST de outra origem
limite de taxa e de corporate_limit, body_limitforç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.