16. diel - Konfiguračný súbor .htaccess
V predchádzajúcej lekcii, Ako na dvojfázové overenie v PHP (2FA) , sme sa zoznámili s dvojfázovým overením a to sme tiež implementovali.
Vitajte v ďalšej lekcii kurze bezpečnosti webových aplikácií. V tejto
lekcii si ukážeme konfiguračný súbor .htaccess
.
.htaccess
.htaccess
je špeciálny súbor, ktorý umožňuje dodatočnú
konfigurácii servera Apache. Servery Apache sú konfigurované pomocou súboru
httpd.conf
, ku ktorému má prístup len správca servera. Veľa
webových aplikácií a stránok je na nejakom serveri hosťovaná a jej
správcovi nemajú k samotnému nastavenie servera prístup, preto vznikol
dodatočný konfiguračný súbor .htaccess
, pomocou ktorého
môžu správcovia webových aplikácií či stránok definovať dodatočné
správania servera.
Medzi správanie, ktoré je možné pomocou súboru .htaccess
definovať a na ktoré sa v dnešnej lekcii pozrieme, patrí:
- Ošetrenie chybových stavov
- Zaheslovanie prístupu do adresárov
- Modifikácia prístupu
- Nastavenie iného predvoleného súboru namiesto súboru
index.php
pod. - kešovania súborov
- Kompresia prenášanie súborov
Vytvorenie súboru .htaccess
Súbor .htaccess
budeme vytvárať v zložkách, pre ktoré
chceme správanie servera upraviť. Modifikované správanie serveri sa dedí do
podložiek. To znamená, že keď uložíme konfiguračný súbor
.htaccess
do koreňového priečinka našich stránok,
modifikované správanie ovplyvní všetky stránky. Naopak to však neplatí a
môžeme mať viac súborov .htaccess
. Ak chceme napríklad
zaheslovať len jednu zložku a ostatní nie, jednoducho vytvoríme nový
.htaccess
súbor v priečinku, ktorú chceme zaheslovať. Súbor
musíme naozaj pomenovať s bodkou na začiatku a bez akejkoľvek koncovky.
Ošetrenie chybových stavov
Pomocou súboru .htaccess
možno ošetriť chybové stavy.
Napríklad, ak dôjde k chybe 404 - Not Found
, môžeme
používateľa presmerovať na nami vytvorenú stránku, ktorá užívateľa
informuje o chybe. Samozrejme možno ošetriť aj iné chybové stavy.
Presmerovanie pri chybovom stave 404 - Not Found
zariadime
pomocou nasledujúceho príkazu:
ErrorDocument 404 cesta_k_dokumentu
Tento riadok pri chybe presmeruje používateľa na nami definovanú stránku. Súboru musíme zadať cestu z koreňového adresára servera, v mojom prípade by ošetrenia chyby vyzeralo nasledovne:
ErrorDocument 404 /work/htaccess/error.php
Po tom, čo by užívateľ otvoril neexistujúcu stránku, bol by
presmerovaný na stránku error.php
, ktorá by mohla vyzerať
napríklad nasledovne:
Heslovanie adresárov
Môžeme tiež zaheslovať ľubovoľný adresár. K tomu budeme musieť
vytvoriť súbor .htpasswd
, ktorý bude uchovávať kombinácia
užívateľských mien a hashovaných hesiel. Tento súbor nemusíme nutne
uložiť do rovnakého adresára, ktorý chceme zaheslovať. Do súboru
.htpasswd
budeme ukladať údaje v nasledujúcom tvare:
login:hashovaneHeslo
Pre vytvorenie odtlačku hesiel môžeme použiť napríklad stránku https://hostingcanada.org/...d-generator/.
Ako príklad do súboru uložíme používateľa s heslom aj menom
admin
. Do súboru teda uložíme užívateľské meno a hashovanie
heslo v tvare:
admin:$apr1$te7uw8nl$h0A4O9tx8w0VOW/pPAwil1
Teraz musíme modifikovať náš .htaccess
súbor, do neho
pridáme kus kódu. Súbor .htaccess
sa musí nachádzať v
adresári, ktorý chceme zaheslovať:
AuthUserFile cesta_k_.htpasswd AuthName "Název stránky" AuthType Basic require valid-user
Do prvého riadku musíme doplniť absolútnu cestu k súboru
.htpasswd
, v mojom prípade to bude:
AuthUserFile C:/xampp/htdocs/work/htaccess/.htpasswd
Keď sa teraz pokúsime otvoriť zaheslovanú zložku, privíta nás prihlasovací formulár:
Vyplnením formulára loginom admin
a heslom admin
,
nám server dovolí otvoriť adresár.
Modifikácie prístupu
Ďalšou možnosťou, ako využiť súbor .htaccess
, je zmena
prístupu. Môžeme odmietnuť prístup užívateľom s konkrétnu IP adresou
alebo z určitého bloku IP adries, dokonca môžeme odoprieť prístup úplne.
Na druhú stranu môžeme tiež povoliť pristup užívateľom s konkrétnu IP
adresou a všetkým ostatným prístup zamietnuť.
Prístup môžeme odoprieť pomocou tejto syntaxe:
deny from "parametr"
Priblíž z konkrétnej adresy 192.168.0.1
môžeme odoprieť
teda takto:
deny from 192.168.0.1
Prístup z ľubovoľnej adresy z bloku 192.168
nasledovne:
deny from 192.168
A odoprieť prístup úplne všetkým pomocou slovíčka
all
:
deny from all
Na druhú stranu povoliť prístup môžeme pomocou príkazu:
allow from parametr
Kde "parametr"
môže nadobúdať rovnakých hodnôt ako u
príkazu deny from
.
Nastavenie iného predvoleného súboru
Pomocou konfiguračného súboru môžeme tiež nastaviť novú defaultný
stránku. Defaultne sú webové servery nastavené, že po otvorení adresára
sa otvorí súbor index.php
alebo index.html
, ak
takýto súbor existuje. Pomocou súboru .htaccess
toto nastavenie
môžeme zmeniť:
DirectoryIndex "soubor"
Do parametra "soubor"
pridáme cestu k súboru, ktorý sa stane
novým indexom:
DirectoryIndex newIndex.php
Naopak automatické otváranie súboru index
môžeme úplne
zakázať pomocou príkazu:
DirectoryIndex disabled
Moduly servera Apache
Pre posledné dve funkcie, ktoré si dnes ukážeme budeme využívať
modulov servera Apache. Konkrétne modulu expires_module
pre
kešovanie a modulov mod_deflate
a mod_filter
pre
kompresiu súborov. Modul expires_module
je defaultne
nainštalovaný na serveroch Apache od verzie 1.2, zvyšné moduly sú defaultne
nainštalované od verzie 2.0. Problém je, že moduly nemusí byť povolené v
konfiguračnom súbore servera httpd.conf
. Pokiaľ k tomuto súboru
máme prístup, stačí do neho dopísať nasledujúce riadky, reštartovať
server a všetko by malo fungovať:
LoadModule expires_module modules/mod_expires.so LoadModule deflate_module modules/mod_deflate.so LoadModule filter_module modules/mod_filter.so
Môže sa tiež stať, že tieto príkazy budú v konfiguračnom súbore
zakomentovány znakom #
, v tomto prípade môžeme znak
#
jednoducho zmazať. V prípade, že nie sú moduly aktivované a
ku konfiguračnému súboru nemáme prístup, musíme kontaktovať správcu
servera.
Kešovania súborov
Kešovania (cachovanie) súborov využíva vyrovnávaciu pamäť užívateľovho prehliadača pre uloženie súborov. Jeho motiváciou je znížiť záťaž hardvéru a zvýšiť rýchlosť odozvy webového servera. Pri opakovanej návšteve stránky tak nemusí užívateľ sťahovať celú stránku a budú použité súbory z vyrovnávacej pamäte. Nevýhodou kešovania môže byť použitie zastaraných súborov z tejto pamäte a zobrazenie tak zastaralé podoby stránky.
Kešovania môžeme v súbore .htaccess
povoliť nasledujúcim
príkazom:
ExpiresActive On ExpiresDefault A600
V prípade, že by nám server vracal chybu
500 - Internal Server Error
, musíme sa uistiť, že máme vyššie
spomínané moduly nainštalované a aktivované.
Tento príkaz nastaví kešovania súboru a ich expiračnú dobu, po ktorej budú z vyrovnávacej pamäte vymazané. Expiračná doba je daná v sekundách, v tomto prípade teda 600 sekúnd.
Dodatočne môžeme nastaviť expiračnú dobu súborov podľa ich typu, niekoľko ich si uvedieme:
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
Kompresia prenášanie súborov
Posledná funkcia, ktorú si v dnešnej lekcii uvedieme, je kompresia prenášaných súborov. Toto nastavenie zabalí nami posielaná dáta do balíka, ktorý potom pošleme užívateľovi. Toto nastavenie pomôže znížiť veľkosť dát prenášaných po sietí.
Kompresiu môžeme povoliť pomocou série príkazov:
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
Tu tiež platí, že pri chybe 500 - Internal Server Error
,
najskôr nemáme správne aktivované alebo nainštalované požadované
moduly.
Opäť môžeme nastaviť kompresiu jednotlivých typov súborov.
Záver
Konfiguračný súbor .htaccess
je užitočným nástrojom pri
vývoji webových aplikácií či stránok. Je vhodné ho využiť minimálne
pre ošetrenie chybových stavov alebo prístupu do určitých zložiek.
V ďalšej lekcii, Konfiguračný súbor .htaccess II. časť , si ukážeme ďalšie funkcie, ktoré môžeme
vytvoriť pomocou konfiguračného súboru .htaccess
.