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