Lekce 16 - Konfigurační soubor .htaccess
V předchozí lekci, Jak na dvoufázové ověření v PHP (2FA), jsme se seznámili s dvoufázovým ověřením a to jsme také implementovali.
Vítejte v další lekci kurzu bezpečnosti webových aplikací. V této
lekci si ukážeme konfigurační soubor .htaccess
.
.htaccess
.htaccess
je speciální soubor, který umožňuje dodatečnou
konfiguraci serveru Apache. Servery Apache jsou konfigurovány pomocí souboru
httpd.conf
, ke kterému má přístup pouze správce serveru.
Hodně webových aplikací a stránek je na nějakém serveru hostována a její
správci nemají k samotnému nastavení serveru přístup, proto vznikl
dodatečný konfigurační soubor .htaccess
, pomocí kterého mohou
správci webových aplikací či stránek definovat dodatečné chování
serveru.
Mezi chování, která lze pomocí souboru .htaccess
definovat a
na která se v dnešní lekci podíváme, patří:
- Ošetření chybových stavů
- Zaheslování přístupu do adresářů
- Modifikace přístupu
- Nastavení jiného výchozího souboru namísto souboru
index.php
apod. - Kešování souborů
- Komprese přenášení souborů
Vytvoření souboru .htaccess
Soubor .htaccess
budeme vytvářet ve složkách, pro které
chceme chování serveru upravit. Modifikované chování serveru se dědí do
podložek. To znamená, že když uložíme konfigurační soubor
.htaccess
do kořenové složky našich stránek, modifikované
chování ovlivní všechny stránky. Naopak to však neplatí a můžeme mít
více souborů .htaccess
. Chceme-li například zaheslovat jen
jednu složku a ostatní ne, jednoduše vytvoříme nový .htaccess
soubor ve složce, kterou chceme zaheslovat. Soubor musíme opravdu pojmenovat s
tečkou na začátku a bez jakékoliv koncovky.
Ošetření chybových stavů
Pomocí souboru .htaccess
lze ošetřit chybové stavy.
Například pokud dojde k chybě 404 - Not Found
, můžeme
uživatele přesměrovat na námi vytvořenou stránku, která uživatele
informuje o chybě. Samozřejmě lze ošetřit i jiné chybové stavy.
Přesměrování při chybovém stavu 404 - Not Found
zařídíme pomocí následujícího příkazu:
ErrorDocument 404 cesta_k_dokumentu
Tento řádek při chybě přesměruje uživatele na námi definovanou stránku. Souboru musíme zadat cestu z kořenového adresáře serveru, v mém případě by ošetření chyby vypadalo následovně:
ErrorDocument 404 /work/htaccess/error.php
Po tom, co by uživatel otevřel neexistující stránku, byl by
přesměrován na stránku error.php
, která by mohla vypadat
například následovně:
Heslování adresářů
Můžeme také zaheslovat libovolný adresář. K tomu budeme muset vytvořit
soubor .htpasswd
, který bude uchovávat kombinace uživatelských
jmen a hashovaných hesel. Tento soubor nemusíme nutně uložit do stejného
adresáře, který chceme zaheslovat. Do souboru .htpasswd
budeme
ukládat údaje v následujícím tvaru:
login:hashovaneHeslo
Pro vytvoření otisku hesel můžeme použít například stránku https://hostingcanada.org/…d-generator/.
Jako příklad do souboru uložíme uživatele s heslem i jménem
admin
. Do souboru tedy uložíme uživatelské jméno a hashované
heslo ve tvaru:
admin:$apr1$te7uw8nl$h0A4O9tx8w0VOW/pPAwil1
Nyní musíme modifikovat náš .htaccess
soubor, do něho
přidáme kus kódu. Soubor .htaccess
se musí nacházet v
adresáři, který chceme zaheslovat:
AuthUserFile cesta_k_.htpasswd AuthName "Název stránky" AuthType Basic require valid-user
Do prvního řádku musíme doplnit absolutní cestu k souboru
.htpasswd
, v mém případě to bude:
AuthUserFile C:/xampp/htdocs/work/htaccess/.htpasswd
Když se nyní pokusíme otevřít zaheslovanou složku, přivítá nás přihlašovací formulář:
Vyplněním formuláře loginem admin
a heslem
admin
, nám server dovolí otevřít adresář.
Modifikace přístupu
Další možností, jak využít soubor .htaccess
, je modifikace
přístupu. Můžeme odepřít přístup uživatelům s konkrétní IP adresou
či z určitého bloku IP adres, dokonce můžeme odepřít přístup úplně.
Na druhou stranu můžeme také povolit přistup uživatelům s konkrétní IP
adresou a všem ostatním přístup zamítnout.
Přístup můžeme odepřít pomocí této syntaxe:
deny from "parametr"
Přistup z konkrétní adresy 192.168.0.1
můžeme odepřít
tedy takto:
deny from 192.168.0.1
Přístup z libovolné adresy z bloku 192.168
následovně:
deny from 192.168
A odepřít přístup úplně všem pomocí slovíčka all
:
deny from all
Na druhou stranu povolit přístup můžeme pomocí příkazu:
allow from parametr
Kde "parametr"
může nabývat stejných hodnot jako u příkazu
deny from
.
Nastavení jiného výchozího souboru
Pomocí konfiguračního souboru můžeme také nastavit novou defaultní
stránku. Defaultně jsou webové servery nastavené, že po otevření
adresáře se otevře soubor index.php
nebo
index.html
, pokud takový soubor existuje. Pomocí souboru
.htaccess
toto nastavení můžeme změnit:
DirectoryIndex "soubor"
Do parametru "soubor"
přidáme cestu k souboru, který se stane
novým indexem:
DirectoryIndex newIndex.php
Naopak automatické otevírání souboru index
můžeme úplně
zakázat pomocí příkazu:
DirectoryIndex disabled
Moduly serveru Apache
Pro poslední dvě funkce, které si dnes ukážeme budeme využívat modulů
serveru Apache. Konkrétně modulu expires_module
pro kešování a
modulů mod_deflate
a mod_filter
pro kompresi
souborů. Modul expires_module
je defaultně nainstalován na
serverech Apache od verze 1.2, zbylé moduly jsou defaultně nainstalovány od
verze 2.0. Problém je, že moduly nemusí být povoleny v konfiguračním
souboru serveru httpd.conf
. Pokud k tomuto souboru máme přístup,
stačí do něj dopsat následující řádky, restartovat server a vše by
mělo fungovat:
LoadModule expires_module modules/mod_expires.so LoadModule deflate_module modules/mod_deflate.so LoadModule filter_module modules/mod_filter.so
Může se také stát, že tyto příkazy budou v konfiguračním souboru
zakomentovány znakem #
, v tomto případě můžeme znak
#
jednoduše smazat. V případě, že nejsou moduly aktivovány a
ke konfiguračnímu souboru nemáme přístup, musíme kontaktovat správce
serveru.
Kešování souborů
Kešování (cachování) souborů využívá vyrovnávací paměť uživatelova prohlížeče pro uložení souborů. Jeho motivací je snížit zátěž hardwaru a zvýšit rychlost odezvy webového serveru. Při opakované návštěvě stránky tak nemusí uživatel stahovat celou stránku a budou použity soubory z vyrovnávací paměti. Nevýhodou kešovaní může být použití zastaralých souborů z této paměti a zobrazení tak zastaralé podoby stránky.
Kešování můžeme v souboru .htaccess
povolit následujícím
příkazem:
ExpiresActive On ExpiresDefault A600
V případě, že by nám server vracel chybu
500 - Internal Server Error
, musíme se ujistit, že máme výše
zmíněné moduly nainstalovány a aktivovány.
Tento příkaz nastaví kešování souboru a jejich expirační dobu, po které budou z vyrovnávací paměti vymazány. Expirační doba je dána v sekundách, v tomto případě tedy 600 sekund.
Dodatečně můžeme nastavit expirační dobu souborů podle jejich typu, několik jich si uvedeme:
ExpiresActive On ExpiresDefault A600 ExpiresByType text/javascript A604800 ExpiresByType application/javascript A604800 ExpiresByType text/css A604800 ExpiresByType image/gif A604800 ExpiresByType image/png A604800 ExpiresByType image/jpeg A604800 ExpiresByType image/x-icon A604800 ExpiresByType text/html A60
Komprese přenášení souborů
Poslední funkcí, kterou si v dnešní lekci uvedeme, je komprese přenášených souborů. Toto nastavení zabalí námi posílaná data do balíku, který poté pošleme uživateli. Toto nastavení pomůže snížit velikost dat přenášených po sítí.
Kompresi můžeme povolit pomocí série příkazů:
AddOutputFilterByType DEFLATE text/plain AddOutputFilterByType DEFLATE text/html AddOutputFilterByType DEFLATE text/xml AddOutputFilterByType DEFLATE text/css AddOutputFilterByType DEFLATE application/xml AddOutputFilterByType DEFLATE application/xhtml+xml AddOutputFilterByType DEFLATE application/rss+xml AddOutputFilterByType DEFLATE application/javascript AddOutputFilterByType DEFLATE application/x-javascript
Zde také platí, že při chybě 500 - Internal Server Error
,
nejspíš nemáme správně aktivovány nebo nainstalovány požadované
moduly.
Opět můžeme nastavit kompresi jednotlivých typů souborů.
Závěr
Konfigurační soubor .htaccess
je užitečným nástrojem při
vývoji webových aplikací či stránek. Je vhodné ho využít minimálně pro
ošetření chybových stavů nebo přístupu do určitých složek.
V další lekci, Konfigurační soubor .htaccess II. část, si ukážeme další funkce, které můžeme
vytvořit pomocí konfiguračního souboru .htaccess
.