Your .htaccess file does not contain all recommended security headers

By | 06/04/2021

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.

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.

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

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/


Dobrovolný dar

Ahoj čtenáři, rád bych tě poprosil aby ses zamyslel, co je vše potřeba ke vzniku článku.
Jakožto amatérský softwarový kutil musím:

1) Nejdříve vše nastudovat v cizích jazycích.
2) Vše následně prakticky vyzkoušet.
3) Svoje poznatky a zkušenosti napsat do článku který si právě přečetl v jazyku kterému rozumíš.
4) Dát článku hlavu a patu a publikovat.

Každý článek zabere několik hodin práce, za kterou mi nikdo neplatí.
Prosím zvaž, kolik času jsem ti právě ušetřil.
Pokud ti to stojí aspoň za cenu jedné kávy, tak mi ji kup.
Předem moc děkuji.

Příspěvek tak můžeš provést zasláním libovolné částky na mé číslo účtu 1558701011/3030 Nebo můžeš dar poslat kliknutím na tento odkaz Podpořit tento WEB , který tě přesměruje na mou platební bránu Revolut.

Dar je také možné poslat ve formě Bitcoinu na BTC peněženku bc1qqdf5fp42a7srwwhh2rut8zr9x4jm5c8fqc9qw6

Veškeré peněžní prostředky budu také používat na zlepšení kvality své webové tvorby a na psaní nových technických návodů. Za každý dar předem děkuji.

Leave a Reply

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