Last Updated on 18/11/2023 by administrator
Your .htaccess file does not contain all recommended security headers
Motivace:
U WordPressu se při kontrole stavu webu může objevit doporučení pro zapnutí bezpečnostních hlaviček (security headers) s hláškou Your .htaccess file does not contain all recommended security headers.
Nasazením hlaviček lze nastavit bezpečnostní pravidla mezi webovým prohlížečem a serverem a lze ochránit nejen web před různými typy útoků, ale také návštěvníky, na které můžou být útoky vedeny. Je to novější způsob aktivní ochrany webu a aplikací a podporují je všechny moderní webové prohlížeče, zatímco starší prohlížeče by je měly ignorovat [11].
Tyto bezpečnostní hlavičky lze doplnit do souboru .htaccess manuálně, nebo elegantněji pomocí níže uvedeného pluginu, což popisuje tento příspěvek.
Implementace:
Stáhnout a nainstalovat plugin HTTP Headers. Jedná se o plugin s nastavením mnoha druhů HTTP hlaviček:
Po aktivaci se plugin objeví v Settings > HTTP Headers:Kliknout na SECURITY:
Zde jsou nastaveny všechny povinné HTTP hlavičky (Status On). Případně jsem připravil i export tohoto nastavení. Soubor je možné stáhnout zde. Ten odzipovat a následně je možné jej importovat přes „Advanced settings“. U hlavičky Expect-CT nezapomenout přepsat Vaší webovou stránku:
Pozn. Nastavení hlavičky „Permission-Policy“ není úplně povinné nicméně zlepší se rating Vaší stránky na securityheaders.com (o tom níže).
Test bezpečnostních hlaviček:
Přítomnost bezpečnostních hlaviček na Vašem webu se dá otestovat na stránkách securityheaders.com. Po nastavení HTTP hlaviček doporučuji počkat i 1 min, než je tato stránka zaregistruje.
Význam nastavených parametrů a krátky popis bezpečnostních hlaviček:
HTTP Strict Transport Security (HSTS):
Hlavička informuje prohlížeč, že má webovou stránku načítat pouze přes zabezpečený HTTPS protokol. Používá se k ochraně před útoky typu „man-in-the-middle“. [3]
#max-age - po stanovenou dobu (sekundy) se bude komunikovat pouze přes HTTPS protokol. #includeSubDomains - nastaví, že i subdomény musí být zabezpečeny a mít SSL certifikát. #preload" - zajistí, po otestování, umístění do preload seznamu distribuovaného do prohlížeče. Strict-Transport-Security: "max-age=31536000"; includeSubDomains; preload
Content-Security-Policy (CSP):
Hlavička snižuje rizika XSS zranitelnosti a vkládání zákeřného kódu útočícího na uživatele. [4]
Pozn. Při zapnutí této hlavičky se nemusí zobrazovat obrázky na webu.
#upgrade-insecure-requests - prohlížeč bude vynuceně načítat vše z HTTPS. Content-Security-Policy "upgrade-insecure-requests"
X-Frame-Options:
Hlavička zakazuje vkládání webu či jeho části do jiných webů a ochraňuje uživatele od zneužití pomocí tzv. „clickjackingu“. [9]
#SAMEORIGIN - omezení na použití v rámu v rámci domény. X-Frame-Options "SAMEORIGIN"
X-Content-Type-Options:
Hlavička sděluje prohlížeči, aby ověřoval, zda zdroj má v hlavičce správně nastavený MIME typ. Zvyšuje se bezpečnost uživatele před škodlivým obsahem. [5]
#nosniff - zakázání sniffingu. X-Content-Type-Options "nosniff"
X-XSS-Protection:
Hlavička X-XSS-Protection povoluje využití zabudovaného filtru proti XSS (cross-site scripting attacks). Jedná se o další vrstvu zabezpečení. [6]
#1; mode=block - Ochrana XSS je aktivována, prohlížeč při útoku stránku nezobrazí. X-XSS-Protection "1; mode=block"
Referrer-Policy:
Hlavička umožňuje kontrolovat a omezit hodnotu v záhlaví Referrer při odkazování na jiné stránky. Správné nastavení může chránit uživatele před zjištěním identity na sociálních sítích při sdílení odkazů nebo omezit dostupné informace pro různé analytické služby. [7]
#no-referrer-when-downgrade - omezení na úroveň protokolu zabezpečení. Referrer-Policy: "no-referrer-when-downgrade"
Expect-CT:
Hlavička umožňuje kontrolovat dodržování souladu s Certificate Transparency (CT) u certifikátu webových stránek. [8]
#max-age nastavuje maximální čas (sekundy) uchování informací v mezipaměti prohlížeče. #enforce - režim prohlížeče na prosazování zásad Certificate Transparency. #report-uri - určuje, kam má prohlížeč zasílat zprávy, pokud neobdrží platné CT informace (pouze pro reporting). Expect-CT "max-age=7776000, enforce, report-uri="https://zdezadatvasweb.cz/ct-report"
Permissions-Policy:
Hlavička slouží ke zvýšení bezpečnosti aplikací například zakázáním funkcí (mikrofonu, kamery, geolokace, ..). [1]
#microphone=() - Funkce používat mikrofon je zakázána. Permissions-Policy "microphone=()"
Příklad nastavení pro Nginx server:
Toto je příklad nastavení Nginx reverzní proxy pro doménu martinuvzivot.cz.
Pozn. Při zapnutí hlavičky Content-Security-Policy se nemusí zobrazovat obrázky na webu.
server { server_name martinuvzivot.cz; location / { proxy_pass http://192.168.0.115; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; add_header X-Content-Type-Options "nosniff"; add_header X-Frame-Options "SAMEORIGIN"; add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always; add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self'"; add_header X-XSS-Protection "1; mode=block" always; add_header Feature-Policy "autoplay 'none'; camera 'none'" always; add_header Permissions-Policy "geolocation=(),midi=(),sync-xhr=(),microphone=(),camera=(),magnetometer=(),gyroscope=(),fullscreen=(self),payment=()"; add_header Referrer-Policy "no-referrer"; }
Zdroje:
[1] https://github.com/w3c/webappsec-permissions-policy/blob/master/permissions-policy-explainer.md
[2] https://wordpress.org/support/topic/missing-security-headers-ssl-2/
[3] https://securityheaders.cz/hsts
[4] https://securityheaders.cz/csp
[5] https://securityheaders.cz/x-content-type-options
[6] https://securityheaders.cz/x-xss-protection
[7] https://securityheaders.cz/referrer-policy
[8] https://securityheaders.cz/expect-ct
[9] https://securityheaders.cz/x-frame-options
[10] https://securityheaders.cz/x-download-options
[11] https://securityheaders.cz/