Security headers: HSTS, CSP, X-Frame-Options a další
· 7 min čtení
Ve zkratce: Security HTTP hlavičky jsou řádky, které server přidává do každé HTTP odpovědi, aby řekl prohlížeči, jak se má chovat k vaší stránce. Správně nastavené eliminují celé třídy útoků (XSS, clickjacking, MITM) - a jsou zdarma.
Ve zkratce: Security HTTP hlavičky jsou řádky, které server přidává do každé HTTP odpovědi, aby řekl prohlížeči, jak se má chovat k vaší stránce. Správně nastavené eliminují celé třídy útoků (XSS, clickjacking, MITM) - a jsou zdarma.
Proč na nich záleží
Aplikace může být backend-side dokonale bezpečná, ale bez správných headerů stále zranitelná na browser-side útoky: cross-site scripting (XSS), clickjacking, protocol downgrade, MIME confusion. Security headery posouvají obranu do prohlížeče.
Strict-Transport-Security (HSTS)
Vynutí HTTPS pro všechny budoucí návštěvy. Po první HTTPS návštěvě prohlížeč zapamatuje doménu a sám přepíše jakýkoli http:// link na https://, i když uživatel klikne na špatnou odpověď.
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
max-age=63072000= platí 2 rokyincludeSubDomains= pravidlo platí i pro všechny subdomény (pozor: pokud máte HTTP-only subdoménu, pokazí ji)preload= umožňuje zařazení do HSTS preload listu, který je zabudován v Chrome / Firefox / Safari
Pozor:
HSTS s preload se ze seznamu odstraňuje 6+ měsíců. Nezahrnujte preload předtím, než si ověříte, že HTTPS funguje stabilně i pro všechny subdomény.
Content-Security-Policy (CSP)
Nejmocnější ale i nejtěžší na nastavení hlavička. Whitelistuje, odkud smí prohlížeč načíst skripty, styly, obrázky, iframe-y. Bez CSP útočník, který dokáže injectovat <script> tag, může spustit libovolný JS - s CSP jen kód ze schválených zdrojů.
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'
Běžné direktivy:
default-src 'self'= jako default povoluj jen zdroje z mé doményscript-src= JS zdroje (specifikujte hash nebo nonce pro inline skripty)style-src= CSS zdrojeimg-src= obrázkyconnect-src= AJAX, WebSocket, EventSourceframe-ancestors 'none'= nikdo nesmí embed-nout stránku do iframe (lepší než X-Frame-Options)report-uri /csp-report= browser pošle JSON při každé violation (vy zachytíte v backendu a logujete)
X-Frame-Options
Starší alternativa k frame-ancestors. Brání clickjackingu - útočník vloží vaši stránku jako iframe a překryje ji neviditelnými tlačítky.
X-Frame-Options: DENY
Hodnoty: DENY (nikdo), SAMEORIGIN (jen moje doména), ALLOW-FROM uri (deprecated).
X-Content-Type-Options
X-Content-Type-Options: nosniff
Vypne MIME sniffing - prohlížeč bude respektovat Content-Type, který vrátil server. Bez toho útočník může nahrát soubor s nesprávným typem (např. obrázek, který je ve skutečnosti HTML se skriptem) a prohlížeč ho může spustit jako web page.
Referrer-Policy
Referrer-Policy: strict-origin-when-cross-origin
Řídí, kolik informací o předchozí stránce pošle prohlížeč do Referer headeru při kliknutí. Default v moderních prohlížečích už je strict-origin-when-cross-origin, ale explicitní deklarativní header zajišťuje konzistenci.
Permissions-Policy
Vypne API, která nepotřebujete - kameru, mikrofon, GPS, geolocation. Útočník přes XSS nemůže žádat tato API.
Permissions-Policy: camera=(), microphone=(), geolocation=(), payment=()
Praktická konfigurace 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 rozsáhlá - definujte podle své aplikace
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; ..." always;
}
Klíčové je always - bez něj nginx hlavičky vynechá při error response (4xx, 5xx).
Audit aktuálního stavu
Nejjednodušeji přes online tool. Náš header check vám ukáže, které hlavičky chybí a které jsou nesprávné. Pro důkladný audit i securityheaders.com dává A-F skóre.
Závěr
Security headery jsou jednou z nejlepších investicí poměru úsilí k zisku v oblasti security - typicky půlhodina nastavení v reverse proxy proti celé kategorii browser-side útoků. Audit jednou půl roku v rámci pravidelné údržby je rozumné minimum.
Bezplatný audit security headers
Bez registrace, výsledek do tří sekund.
Vyzkoušejte ePulz.io zdarma - 7 dní bez kreditní karty.
Vytvořit účet