HTTP "security" headers jsou základním prvkem webové bezpečnosti. Když navštívíte jakoukoliv webovou stránku z vašeho prohlížeče, server vám společně s požadovaným obsahem pošle v odpovědi sadu HTTP hlaviček. Některé HTTP hlavičky říkají prohlížeči, jak se chovat při prohlížení webu. Správná konfigurace těchto hlaviček zajistí návštěvníkům mnohem bezpečnější prohlížení webové stránky a sníží riziko útoků proti nim.
Existuje celá řada HTTP hlaviček, kterých byste si měli být vědomi a pokud je to možné, doporučujeme je implementovat. Kontrola níže uvedených HTTP hlaviček také bývá prvním krokem během penetračního testu. Pojďme se na ně proto podívat blíže.
HTTP hlavička X-Frame-Options říká prohlížeči, zde a za jakých okolností může konkrétní webovou stránku zobrazit v rámu. Samotné načtení stránky v iframe ještě nepředstavuje bezpečnostní riziko. Ovšem v určitých případech lze tuto funkcionalitu zneužít k různým útokům na klienta (např. clickjacking, podvodné hlasování v anketách, apod.).
Konkrétní nastavení má několik hodnot:
DENY
SAMEORIGIN
ALLOW-FROM https://tunasec.com
Ukázka konfigurace webového serveru:
Nginx
add_header X-Frame-Options "DENY" always;
Apache
Header always set X-Frame-Options "DENY"
V naprosté většině případů si vystačíte s hodnotou DENY, tedy zakázat možnost vkládání vaší webové stránky do iframe.
Hlavička X-XSS-Protection říká prohlížeči, zda a jak má použít vestavěný filtr proti XSS (Cross-Site Scripting) útokům. To se týkalo hlavně starších verzí Google Chrome, v současné době je doporučeno použít hlavičku CSP (Content-Security-Policy).
Konkrétní nastavení má několik hodnot:
1; mode=block
1; report=
1
0
Ukázka konfigurace webového serveru:
Nginx
add_header X-XSS-Protection "1; mode=block" always;
Apache
Header always set X-XSS-Protection "1; mode=block"
XSS Auditor původně představený v prohlížečích Chrome a Safari, měl pomoci zabránit běžným XSS útokům. V některých případech však způsoboval potíže a nebylo jej těžké obejít, dnes se tak používá více méně pro ochranu uživatelů používajících starší verze prohlížečů.
Hlavička X-Content-Type-Options říká prohlížeči, aby respektoval MIME type hodnotu souborů podle hlavičky Content-Type a nezkoušel MIME type odhadnout na základě obsahu souboru. Zjednodušeně řešeno, prohlížeč bude interpretovat vzdálený JavaScript v HTML tagu script, pouze pokud načítaný soubor zasílat správnou hlavičku s Content-Type “application/javascript.
Konkrétní nastavení má pouze jednu hodnotu:
nosniff
Ukázka konfigurace webového serveru:
Nginx
add_header X-Content-Type-Options "nosniff" always;
Apache
Header always set X-Content-Type-Options "nosniff"
To zabrání útočníkům načítat a interpretovat například JavaScript schovaný v obrázku, který se podařilo nahrát na server. Efektivně tak uživatele ochrání před útoky pomocí tzv. polyglot souborů, které se tváří jako několik validních typů souborů současně.
HTTP hlavička Referrer-Policy určuje, kolik informací o referreru (odeslaných prostřednictvím hlavičky Referer) by mělo být zahrnuto do requestů webového prohlížeče. Kromě hlavičky HTTP můžete toto pravidlo nastavit v HTML.
Konkrétní nastavení má několik hodnot:
no-referrer
no-referrer-when-downgrade
origin
https://example.com/?username=admin&pass=love
odešle pouze https://example.com/
.origin-when-cross-origin
same-origin
strict-origin
strict-origin-when-cross-origin
unsafe-url
Ukázka konfigurace webového serveru:
Nginx
add_header Referrer-Policy "same-origin" always;
Apache
Header always set Referrer-Policy "same-origin"
Referer může v určitých případech prozradit citlivé informace o uživatelích, například ID v URL adrese při přechodu návštěvníka z jedhoho webu na druhý. Ideálně by se tak měla tato informace předávat pouze v rámci jednoho originu.
HTTP hlavička, která se původně jmenovala Feature-Policy, říka přohlížečí, jaké funkce může na webu používat. Například zakazuje přístup ke kameře a mikrofonu.
Konkrétní nastavení má několik hodnot:
Ukázka konfigurace webového serveru:
Nginx
add_header Permissions-Policy "accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()" always;
Apache
Header always set Permissions-Policy "accelerometer=(), camera=(), geolocation=(), gyroscope=(), magnetometer=(), microphone=(), payment=(), usb=()"
Konkretní funkce zavisí na verzi a typu webového prohlížeče, nastavení pak na konkrétních potřebách webového serveru. Je doporuřeno vypnout ty, které váš web nepotřebuje.
Hlavička Záhlaví odpovědi HTTP Strict-Transport-Security (často zkráceně HSTS) umožňuje webovým serverům sdělit prohlížečům, že by k nim měl být přistupovat pouze pomocí HTTPS, namísto použití HTTP.
Konkrétní nastavení má několik hodnot:
max-age=
includeSubDomains
preload
Ukázka konfigurace webového serveru:
Nginx
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains; preload" always;
Apache
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
V současné době není důvod nepoužívat HTTPS a Strict-Transport-Security je další krok pro ochranu vašich uživatelů před útoky typu MITM/PITM (person-in-the-middle).
HTTP hlavička Content-Security-Policy umožňuje správcům webových stránek řídit zdroje, které může prohlížeč načíst pro danou stránku. Je tak možné například zakázat načítaní JavaScript z cizí domény.
Konkrétní nastavení má několik hodnot:
Ukázka konfigurace webového serveru:
Nginx
add_header Content-Security-Policy "default-src 'self'" always;
Apache
Header always set Content-Security-Policy "default-src 'self'"
Správné nastavení Content-Security-Policy je celkém složité, každopádně velice zvyšuje zabezpečení. Dokáže například eliminovat XSS (Cross-Site Scripting) útoky. Tato hlavička si zaslouží svůj vlastní článek, případně doporučujeme rovnou se obrátit na oficiální dokumentaci :)
Pro kontrolu vašeho webu a ověření správnosti konfigurace (včetně známky), můžete použít bezplatný nástroj securityheaders.com. Pro zlepšení bezpečnosti je můžete nastavit ještě dnes!
Zdroje: