Your .htaccess file does not contain all recommended security headers

By | 06/04/2021

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.

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:

install new plugin
.htaccess security headers

Po aktivaci se plugin objeví v Settings > HTTP Headers:.htaccess security headersKliknout na SECURITY:

.htaccess security headers

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:

.htaccess security headers

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]

#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=()"

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/


Leave a Reply

Your email address will not be published. Required fields are marked *