Php a bezpečnosť skriptov

Mnoho správcov, len čo nainštaluje interpréter php a databázový server, pustí sa hneď po programovania zložitých dátových informačných systémov, ako je napr. elektronický obchod bez akýchkoľvek poznatkov o bezpečnosti php. Nasledujúci článok poukazuje na niektoré chyby, ktorých sa často dopúštajú programátori php.

Dopracovať sa k zdrojovým kódom php skriptov je pomerne obtiažne, pretože dobre nastavený webovský server používateľovi nikdy neodošle nič čo sa končí príponou .php, .php3, .php4, .phtml priamo, ale pošle to prekladaču php na spracovanie. Zámerne som nepovedal, že sa to nedá, pretože je to možné s použitím menšieho fígla, ktorým možno web server oklamať.

Programátori často robia veľmi hrubú chybu: niektoré súbory obsahujúce skripty ukladajú s príponou inc. Takéto súbory sa nazývajú include skripty. Include skripty sa neposielajú klientovi, slúžia iba na definovanie rôznych funkcií, prípadne obsahujú často používané dáta, ktoré sa z hlavného skriptu volajú pomocou funkcie include alebo require. Užívateľ prakticky o týchto skriptoch ani netuší, a nevie ani ich url adresu. Ak by však url adresu náhodou trafil, webovský server mu vyklopí celý zdrojový kód skriptu bez akéhokoľvek spracovania, pretože nepozná príponu inc. Toto je obzvášt nebezpečné, ak je na webovskom servri nastavená konfiguračná direktíva, ktorá dovoľuje browsovanie po adresároch. Potenciálny útočník takto môže veľmi rýchlo získať zoznam všetkých include skriptov na servri. Medzi funkcie, ktoré bývajú uložené v php skriptoch patria veľmi často aj funkcie na pripájanie k databázovým servrom. Keďže databázový server obvykle vyžaduje od klienta heslo, toto heslo je uložené v zdrojovom kóde ako parameter funkcie na pripojenie k DB.

Dalším problémom, s ktorým som sa stretol bol neošetrená kontrola vstupných dát. Ak php skriptu nanútime určité dáta, či už pomocou url adresy, alebo prostredníctvom web formulára, skript môže buď "spadnúť", napáchať škody, alebo odoslať klientovi neželané dáta. Situácia je zvlášť kritická pri neošetrenom vstupe v kombinácií s funkciou include. Webovský server nám nikdy nepošle súbory, ktoré sa nenachádzajú v adresári, ktorý má webovský server definovaný ako takzvaný web-root adresár. Web-root adresár je z pozície vonkajšej siete chápaný ako koreňový adresár danej domény, ktorý je najvyšší, neexistuje preň nadradený adresár. Preto sa prostredníctvom url adresy nemôžeme odkázať do iných adresárov, ale môžeme sa pohybovať iba v hierarchickej štruktúre web-root adresára. Situácia je však iná v kombinácií s php. Interpréter php beží na servri ako obyčajná aplikácia a nerešpektuje žiadne web-root adresáre webovského servra. Interpréter php má dosah na akýkoľvek súbor v hociktorom adresári (ak si odmyslíme práva v Linuxoch). Pomocou funckcie include môžeme takto do súboru, ktorý bude vygenerovaný a odoslaný klientovi vložiť prakticky hocičo - aj súbor s heslami používateľov /etc/passwd. Časť skriptu s neošetrenou kontrólou vstupu môže vyzerať trebárs takto:



Príklad: ak sa táto časť skriptu nachádza v skripte "skript.php", potom vyvolaním tohto skriptu pomocou url adresy s vhodnými parametrami získame akýkoľvek súbor z danej mašiny:

www.nas-server.sk/skript.php?subor=/etc/passwd

Po zadaní tejto adresy nám web server ihneď vyklopí všetky mená užívateľov daného stroja, poprípade aj ich heslá v kryptovanej podobe.

Dev, noemail@noemail.com
Stiahnuté z Developer.sk