Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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ě:

Bezpečnost webových aplikací v PHP

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ář:

Bezpečnost webových aplikací v PHP

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.


 

Předchozí článek
Jak na dvoufázové ověření v PHP (2FA)
Všechny články v sekci
Bezpečnost webových aplikací v PHP
Přeskočit článek
(nedoporučujeme)
Konfigurační soubor .htaccess II. část
Článek pro vás napsal Jan Hranický
Avatar
Uživatelské hodnocení:
8 hlasů
Aktivity