Datahorses

Bezpečnostní HTTP hlavičky, které by měl posílat každý firemní web

Autor: · · 4 min čtení

Bezpečnostní HTTP hlavičky jsou pokyny, které váš webový server posílá s každou stránkou. Říkají prohlížeči, jak má s vaším webem zacházet: vždy používat HTTPS, nedovolit jiným webům vložit vaše stránky do rámce, nehádat typ souborů a načítat skripty jen z míst, kterým důvěřujete. Výkon webu nijak nezatěžují a nastavují se jednou v konfiguraci serveru nebo CDN.

Pro většinu firemních webů stručně: posílejte Strict-Transport-Security, Content-Security-Policy (alespoň s frame-ancestors), X-Content-Type-Options, Referrer-Policy a Permissions-Policy, nastavte cookies se správnými příznaky a odstraňte hlavičky, které prozrazují verze vašeho softwaru. Doporučené hodnoty níže vycházejí z OWASP HTTP Headers Cheat Sheet a MDN.

Chybějící hlavičky samy o sobě jen zřídka znamenají akutní problém. Prozrazují ale, jak pečlivě je web nastavený, a jejich doplnění uzavírá celé skupiny útoků na straně prohlížeče.

Jak své hlavičky zkontrolovat

Vyžádejte si od serveru hlavičky vaší úvodní stránky:

curl -sI https://yourcompany.com/

Zkontrolujte každý název hostitele, nejen ten hlavní: e-shop, přihlášení, zákaznický portál i staré testovací servery, které stále odpovídají. Hlavičky nastavené v aplikaci často chybí na chybových stránkách, u přesměrování a statických souborů, proto otestujte několik různých URL.

Hlavičky, které se vyplatí posílat

Strict-Transport-Security (HSTS)

Říká prohlížeči, aby pro vaši doménu po stanovenou dobu používal výhradně HTTPS, takže návštěvníka nelze nepozorovaně stáhnout zpět na HTTP.

Strict-Transport-Security: max-age=63072000; includeSubDomains

max-age se uvádí v sekundách. includeSubDomains přidejte, jen když všechny subdomény fungují přes HTTPS. Pro zařazení do preload seznamů prohlížečů vyžaduje hstspreload.org max-age alespoň 31536000 (1 rok), includeSubDomains a preload. Zařazení do preloadu se ruší obtížně, proto ho přidejte až nakonec.

Content-Security-Policy (CSP)

Určuje zdroje, ze kterých smí stránka načítat skripty, styly, obrázky a rámce. Dobře nastavená politika je nejsilnější obranou proti cross-site scriptingu na straně prohlížeče, musí ale přesně sedět na váš web. Začněte v režimu, který jen hlásí, pomocí Content-Security-Policy-Report-Only, sledujte, co by se zablokovalo, a teprve potom ji začněte vynucovat.

I bez úplné politiky je jedna direktiva jednoduchá a užitečná:

Content-Security-Policy: frame-ancestors 'self'

frame-ancestors určuje, které weby smí vaše stránky vkládat, a tím blokuje clickjacking. Musí se posílat jako hlavička, v tagu <meta> nefunguje.

X-Frame-Options

Starší způsob, jak zablokovat vkládání do rámců. OWASP doporučuje tam, kde to jde, používat frame-ancestors a X-Frame-Options: DENY (nebo SAMEORIGIN) jen jako zálohu pro starší prohlížeče.

X-Content-Type-Options

X-Content-Type-Options: nosniff

Zabrání prohlížeči hádat typ souboru, takže nahraný soubor nelze spustit jako skript. Ověřte, že hlavičky Content-Type jsou na celém webu správné.

Referrer-Policy

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

Omezuje, jakou část vašich URL prohlížeč předá jiným webům, když návštěvník klikne na odkaz. Důležité je to všude, kde URL obsahují čísla objednávek, tokeny nebo hledané výrazy.

Permissions-Policy

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

Vypne funkce prohlížeče, které váš web nepoužívá, takže si je podstrčený skript nemůže vyžádat.

Příznaky potřebují i cookies

Session cookies by měly mít nastavené Secure (jen přes HTTPS), HttpOnly (nečitelné z JavaScriptu) a SameSite=Lax nebo Strict:

Set-Cookie: session=...; Secure; HttpOnly; SameSite=Lax; Path=/

Zkontrolujte také atribut Domain. Cookie s rozsahem .yourcompany.com může číst každá subdoména, což je podstatné ve chvíli, kdy by některou z nich někdo převzal přes visící DNS záznam.

Hlavičky, které je třeba odstranit nebo přestat používat

  • Server a X-Powered-By s čísly verzí, například Apache/2.4.41 nebo PHP/7.4.3. Komukoli přesně řeknou, jaký software a jakou verzi má hledat. OWASP doporučuje X-Powered-By odstranit a Server nastavit tak, aby nic neprozrazoval.
  • X-XSS-Protection. MDN ji označuje jako zastaralou a nestandardní a upozorňuje, že může způsobit problémy i na jinak bezpečných webech. OWASP ji doporučuje nenastavovat, případně nastavit X-XSS-Protection: 0, a spolehnout se na CSP.
  • Expect-CT. OWASP ji radí nepoužívat a ze stávajících konfigurací odstranit.

Kde je nastavit

Hlavičky nastavte na jednom místě, odkud pokryjí všechny odpovědi: na webovém serveru (nginx add_header ... always;, Apache Header always set), v CDN nebo v nastavení hlaviček hostingové platformy. Klíčové slovo always v nginx je důležité: bez něj se hlavičky přidávají jen k úspěšným odpovědím a přesměrováním, ne k chybovým stránkám.

Krátký kontrolní seznam

  • Spusťte curl -sI pro každý název hostitele, který vlastníte.
  • Přidejte HSTS, X-Content-Type-Options, Referrer-Policy, Permissions-Policy a frame-ancestors.
  • Úplnou CSP nasaďte nejprve v režimu jen pro hlášení.
  • Na session cookies nastavte Secure, HttpOnly a SameSite.
  • Odstraňte čísla verzí ze Server a X-Powered-By a zrušte X-XSS-Protection a Expect-CT.
  • Vše znovu zkontrolujte po každé změně serveru, CDN nebo platformy.

Když už jste v konfiguraci serveru, ověřte také, že nezpřístupňuje soubory .env, .git nebo zálohy.

Kde pomůže Datahorses

Datahorses každý den sleduje vaše weby zvenčí a kontroluje to, co z nich dostávají prohlížeče i útočníci: chybějící bezpečnostní hlavičky, cookies bez Secure, HttpOnly nebo SameSite, servery prozrazující své verze a smíšený HTTP obsah na HTTPS stránkách. Do vašich systémů nevstupujeme a žádné přístupy nepotřebujeme. Ke každému zjištění dodáme přesnou změnu konfigurace pro vašeho vývojáře. Podívejte se na úplný seznam toho, co hlídáme, nebo si vyžádejte nabídku.

Další články

Všechny články