Optimalizace webu | 3. Bezpečnostní hlavičky

Bezpečnostní hlavičky – Security score

Tato metrika ukazuje bezpečnost webu pro návštěvníky, započítává se šance na podstrčenou stránku či nežádoucí přesměrování. Do celkového skóre, se započítává verze javascriptových knihoven (starší představují bezpečnostní riziko) a nastavené bezpečnostní hlavičky. Tyto hlavičky se zapisují buď pomocí PHP, v konfiguraci serveru nebo do souboru .htaccess. Uvedené příklady jsou pro zapsání do souboru .htaccess.

Javascriptové knihovny musíte aktualizovat dle dokumentace. V případě redakčních systému, by mělo docházet aktualizacím ze strany vývojářů.

Seznam hlaviček, které v nastavení chybí

HTTP Strict-Transport-Security (HSTS)

Nastavení hlavičky HTTP Strict-Transport-Security sdělujeme prohlížečům, že mají k webserveru přistupovat pouze pomocí HTTPS, namísto HTTP. Informuje tedy prohlížeč, že by nikdy neměl načíst web pomocí protokolu HTTP ale má automaticky převést všechny pokusy o přístup na web na zabezpečené HTTPS. Toto je možné využít pouze pokud máte pro svůj web vygenerovaný SSL certifikát a funkční HTTPS protokol.

Příklad pro zapsání této hlavičky

Header set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" env=HTTPS
  • max-age – udává životnost hlavičky
  • includeSubDomains – říká, že do nastavení se vztahují i subdomény
  • preload – říká prohlížeči aby doménou zařadil to globálního preload seznamu – https://hstspreload.org/
  • env=HTTPS – podmínka, že HSTS nesmí být nastaveno pro nezabezpečený protokol HTTP, ale pouze HTTPS

X-Content-Type-Options

Nastavením X-Content-Type-Options sdělujeme prohlížečům, že nemají odhadovat typ souboru/média ale mají se řídit pouze předanými informacemi. Tím zvýšíme bezpečnost uživatele před škodlivým obsahem, který předstírá, že je bezpečným typem dokumentu.

Toto nastavení pomůže, pokud by Váš web někdo napadl (zjištěním hesla do DB nebo FTP) a nahrál na web škodlivé soubory, které se vydávají například za textové dokumenty nebo obrázky ale ve skutečnosti se jedná například o script. Prohlížeče totiž poznají že se nejedná přesně o dokument, ale jedná se o soubor, který mu je podobný. Prohlížeč tedy soubor označí například jako bezpečný textový soubor ale ve skutečnosti se bude jednat o nebezpečný script.

Header set X-Content-Type-Options nosniff
  • Parametr „nosniff“ je jediný možný a nutný parametr aby hlavička splnila účel

X-Frame-Options

Hlavička X-Frame-Options zabraňuje použití tzv. „clickjackingu“, kdy útočník na podvodné stránce vloží Vaší stránku a nad ní umístí průhlednou vrstvu s vlastními událostmi a odkazy o kterých návštěvník netuší. Útočník si tedy založí doménu s podobným názvem jako je Vaše a vloží na ní obsah Vašeho webu přes <iframe>. Přes tento iframe vloží průhledný blok, který má vlastní linky s odkazem na škodlivé či podvodné stránky.

Header set X-Frame-Options SAMEORIGIN

Je možné použít parametr SAMEORIGIN, který říká že stránka může iframe použít pouze v rámci jedné domény. Případně lze použít parametr DENY, který vkládání zakazuje kompletně.

Content Security Policy (CSP)

Jedná se pravděpodobně o nejkomplikovanější hlavičku ale zároveň tu nejužitečnější.

Content Security Policy je hlavička, která prohlížeči říká, z jakých zdrojů může soubory nahrávat. Použitím CSP lze zabránit, aby byly do stránek vkládány škodlivé funkce. Je možné definovat konkrétní soubory (obrázky, skripty, styly, fonty, média), rovněž se může nařídit načítání pouze přes https protokol nebo pouze z vlastní domény. CSP hlavička může být poměrně obsáhlá a pokud načítaný obsah nevyhovuje jejím pravidlům, není načten a prohlížeč do své konzole vypíše chybovou zprávu. U webů s vícero zdroji je nasazení hlavičky Content-Security-Policy dosti obtížné.

Zde vám představíme pouze pár základů. Samotná syntaxe této hlavičky je následující

Content-Security-Policy: <policy-directive>; <policy-directive>;

Příklad

Header set Content-Security-Policy "default-src 'self'; img-src 'self' https://wedos.com"

Tato hlavička nám říká, že všechny možné zdroje se smí nahrávat pouze z vlastní domény (default-src ‚self‘), následně definujeme obrázky, které je možné nahrávat z vlastní domény a ze zabezpečené verze https://wedos.com

Tento zápis lze řešit i jako jednotlivé řádky tedy například takto

Header set Content-Security-Policy "default-src 'self'"
Header set Content-Security-Policy "img-src 'self' https://wedos.com"

V případě využití více zdrojů na webu je kód poté přehlednější. Detailněji je CSP popsané zde https://securityheaders.cz/csp