Your .htaccess file does not contain all recommended security headers

By | 06/04/2021

Last Updated on 12/11/2025 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.

.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.

securityheaders.com

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";
  }

Věřím, že tento článek – Your .htaccess file does not contain all recommended security headers pomohl.

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/

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *