← Späť na blog
2024-07-30 · 7 min

HTTP security hlavičky: HSTS, CSP, X-Frame-Options a ďalšie

V skratke: Security HTTP hlavičky sú riadky, ktoré server pridáva do každej HTTP odpovede, aby povedal prehliadaču, ako sa má správať k vašej stránke. Správne nastavené eliminujú celé triedy útokov (XSS, clickjacking, MITM) - a sú zadarmo.

Prečo na nich záleží

Aplikácia môže byť backend-side dokonale bezpečná, no bez správnych headerov stále zraniteľná na browser-side útoky: cross-site scripting (XSS), clickjacking, protocol downgrade, MIME confusion. Security headery posúvajú obranu do prehliadača.

Strict-Transport-Security (HSTS)

Vynúti HTTPS pre všetky budúce návštevy. Po prvej HTTPS návšteve prehliadač zapamätá doménu a sám prepíše akýkoľvek http:// link na https://, aj ak používateľ klikne na zlú odpoveď.

Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
  • max-age=63072000 = platí 2 roky
  • includeSubDomains = pravidlo platí aj pre všetky subdomény (pozor: ak máte HTTP-only subdoménu, pokazí ju)
  • preload = umožňuje zaradenie do HSTS preload listu, ktorý je zabudovaný v Chrome / Firefox / Safari
Pozor: HSTS s preload sa zo zoznamu odstraňuje 6+ mesiacov. Nezahŕňajte preload predtým, ako si overíte, že HTTPS funguje stabilne aj pre všetky subdomény.

Content-Security-Policy (CSP)

Najmocnejšia ale aj najťažšie nastaviteľná hlavička. Whitelistuje, odkiaľ smie prehliadač načítať skripty, štýly, obrázky, iframe-y. Bez CSP útočník, ktorý dokáže injectovať <script> tag, môže spustiť ľubovoľný JS - s CSP iba kód zo schválených zdrojov.

Content-Security-Policy: default-src 'self'; script-src 'self' 'sha256-...'; img-src 'self' data: https://cdn.example.com; style-src 'self' 'unsafe-inline'; frame-ancestors 'none'

Bežné direktívy:

  • default-src 'self' = ako default povoľ iba zdroje z mojej domény
  • script-src = JS zdroje (špecifikujte hash alebo nonce pre inline skripty)
  • style-src = CSS zdroje
  • img-src = obrázky
  • connect-src = AJAX, WebSocket, EventSource
  • frame-ancestors 'none' = nikto nesmie embed-nuť stránku do iframe (lepšie ako X-Frame-Options)
  • report-uri /csp-report = browser pošle JSON pri každej violation (vy zachytíte v backende a logujete)

X-Frame-Options

Staršia alternatíva k frame-ancestors. Bráni clickjackingu - útočník vloží vašu stránku ako iframe a prekryje ju neviditeľnými tlačidlami.

X-Frame-Options: DENY

Hodnoty: DENY (nikto), SAMEORIGIN (iba moja doména), ALLOW-FROM uri (deprecated).

X-Content-Type-Options

X-Content-Type-Options: nosniff

Vypne MIME sniffing - prehliadač bude rešpektovať Content-Type, ktorý vrátil server. Bez toho útočník môže nahrať súbor s nesprávnym typom (napr. obrázok, ktorý je v skutočnosti HTML so skriptom) a prehliadač ho môže spustiť ako web page.

Referrer-Policy

Referrer-Policy: strict-origin-when-cross-origin

Riadi, koľko informácií o predchádzajúcej stránke pošle prehliadač do Referer headeru pri kliknutí. Default v moderných prehliadačoch už je strict-origin-when-cross-origin, ale explicit deklaratívny header zabezpečuje konzistenciu.

Permissions-Policy

Vypne API, ktoré nepotrebujete - kameru, mikrofón, GPS, geolocation. Útočník cez XSS nemôže žiadať tieto API.

Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=()

Praktická konfigurácia v nginx

server {
  listen 443 ssl http2;
  server_name example.com;

  add_header Strict-Transport-Security "max-age=63072000; includeSubDomains" always;
  add_header X-Content-Type-Options "nosniff" always;
  add_header X-Frame-Options "DENY" always;
  add_header Referrer-Policy "strict-origin-when-cross-origin" always;
  add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;

  # CSP je rozsiahla - definujte podľa svojej aplikácie
  add_header Content-Security-Policy "default-src 'self'; script-src 'self'; ..." always;
}

Kľúčové je always - bez neho nginx hlavičky vynechá pri error response (4xx, 5xx).

Audit aktuálneho stavu

Najjednoduchšie cez online tool. Náš header check vám ukáže, ktoré hlavičky chýbajú a ktoré sú nesprávne. Pre dôkladný audit aj securityheaders.com dáva A-F skóre.

Záver

Security headery sú jednou z najlepších investícií pomeru úsilia ku zisku v oblasti security - typicky polhodina nastavenia v reverse proxy proti celej kategórii browser-side útokov. Audit raz pol roka v rámci pravidelnej údržby je rozumné minimum.

Bezplatný audit security headers

Bez registrácie, výsledok do troch sekúnd.

Otestovať web →