Nastavení Security Headers v .htaccess

.htaccess - nastavení Security Headers

Návod na nastavení bezpečnostních hlaviček na linuxovém serveru/hostingu.

Soubor .htaccess je textový soubor umístěný v diskovém prostoru webových stránek a slouží k nastavení některých vlastností serveru, které by jinak musel upravovat administrátor serveru. Soubor .htaccess lze vytvořit a editovat v jakémkoliv textovém editoru. Název opravdu začíná tečkou a nemá souborovou příponu jako *.txt nebo .php. Informace o .htaccess ve Wiki.

Použití souboru .htaccess

Možností, které dává .htaccess je mnoho. Můžete pomocí vložených pravidel zabezpečit stránku heslem, přesměrovat na vlastní chybovou stránku nebo kompletně přesměrovat veškerou komunikaci na HTTPS. V neposlední řadě lze pomocí souboru .htaccess nastavit Security Headers.

Ukázkové nastavení .htaccess

V článku 5 hlaviček co musíte mít na webu je uveden přehled doporučených Security Headers pro jakékoliv webové stránky. V ukázkovém zápisu u hlavičky CSP (Content-Security-Policy) je použita direktiva 'upgrade-insecure-requests' pro načítání obsah pouze z HTTPS. Větší využití hlavičky CSP vyžaduje pokročilejší znalosti nastavení Security Headers.

# Ukázkový zápis souboru .htaccess
# Projekt SecurityHeaders.cz
# Nastavení přesměrování domény na https://www.

RewriteEngine On

# redirection all http -> https
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
# redirection -> www.
RewriteCond %{HTTP_HOST} !^www\. [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]


# Security Headers settings
# X-XSS-Protection
Header set X-XSS-Protection "1; mode=block" 
# X-Content-Type-Options
Header set X-Content-Type-Options nosniff 
# X-Download-Options
Header set X-Download-Options: noopen 
# X-Frame-Options settings
Header set X-Frame-Options DENY
# Referrer-Policy settings
Header set Referrer-Policy "strict-origin-when-cross-origin"
# HSTS 190 days
Header set Strict-Transport-Security "max-age=16416000; includeSubdomains"
# CSP settings
Header set Content-Security-Policy: "upgrade-insecure-requests;"

Někdy se na internetu můžete setkat se zápisem uzavřeným v tagu <IfModule>, který kontroluje, zda je jmenovaný modul do apache načten. Lze tak vytvářet podmíněné konfigurace pro různé instalace a moduly.

<IfModule mod_headers.c>
    Header set X-Frame-Options "sameorigin"
</IfModule>

Pokud to není nutné, nemusíte a nepoužívejte tento zápis. Může se totiž stát, že na serveru dojde ke změnám (upgrade, migrace) a modul již nebude k dispozici. Při podmíněném zápisu se nastavené příkazy nevykonají a může dojít k nepředvídatelným situacím, aplikace se začne chovat jinak a vy se to nijak nedozvíte. V každém případě byste vždy měli vědět, které moduly webový server načítá a co můžete využívat.

Zkontrolujte si zdvojené hlavičky

Webhostingové servery mohou být již nastavené administrátorem tak, že posílají některé bezpečnostní hlavičky samy. Je proto nutné před nastavením .htaccess zkontrolovat zda server tak již nečiní. Na obrázku je ukázáno dvojnásobné zasílání hlaviček X-XSS-Protection a X-Content-Type-Options. Z toho důvodu se řádky s hlavičkami ze souboru .htaccess vymažou.

Zdvojené hlavičky posílané ze serveru

V případě zdvojené hlavičky X-XSS-Protection zobrazuje Chrome v console výpise chybu "Error parsing header X-XSS-Protection: 1;mode=block, 1; mode=block: expected semicolon at character position 12. The default protections will be applied.".

Správné HTTPS přesměrování podle Mozilla.org

Podle doporučení Mozilla.org je postup správného přesměrování: http://example.com → https://example.com → https://www.example.com
Tedy nejdříve na stejné doméně přesměrujeme na zabezpečený protokol https a následně na "druhou doménu". Toto nastavení umožňuje správně použít záhlaví protokolu HTTP pro hlavičku HSTS.

Správné přesměrování si můžete otestovat na webové adrese observatory.mozilla.org.

Testování kvality přesměrování

Nesprávné přesměrování http://example.com → https://www.example.com je v testu penalizováno.
V případě použití multi-doménových SSL certifikátů, které neobsahují variantu domény s a bez www je vhodné přesměrovávat hned na variantu HTTPS://.