PHP require_once – na, így nem szabad!

Körbenéztem a weboldalak error.log naplóiban, hogy mit lehet látni. Találtam egy helyes (illetve helytelen példát), amit most iderakok elrententésként, hogy miként lehet egy programozói bakival bevonzani a sok rosszakarót. Ha ilyen kódot használunk honlapunkban, és az a célunk, hogy kínából, oroszországból döljenek a támadások, hátradölhetünk, mert sikerült... Egy kis esettanulmány következik.

Adott a honlap, robotok ezerszám szórjak a vendégkönyvbe több hónapja a pornó, cialis, és viagra népszerűsítő reklámokat. Tonnaszám. Na de azért akad itt más is!

A kódrészlet egy nyelvi file betöltésére vonatkozik, nyilván akkor kap szerepet, ha nyelvet akarunk váltani. Igen rossz kód...

A "nyelv" változót egyszerűen a címsorból kapjuk, egy változóval, ez a $_GET['nyelv']. Aztán ebből csinál a kód egy $_SESSION['nyelv'] változót.  Az első hiba az, hogy semmiféle ellenőrzés, korlátozás nincs,  hogy milyen értéket fogadunk el itt. Ha rögtön defeiniálva lenne néhány lehetőség -  pl.: if(in_array($_GET['nyelv'], array('magyar', 'angol')) - akkor már kiütnénk a próbálkozásokat. Mivel ez nincs meg, ész  nélkül bármit beszív a  honlap, ha olyan nyelvet adunk meg, amire nincs file, hibaüzenettel száll el.

Az is hiba, hogy egy ilyen változót csak úgy mutogatunk a böngésző címsorában, csak arra várva, hogy egy szemfüles badguy észrevegye. Még  nagyobb gond lenne, ha esetleg csinálnánk egy SQL lekérdezést is,  folytatva az ámokfutást. Mivel semmi escapelés nincs, elég necces lenne.

Persze végül meglátták a lehetőséget messzeföldön is. Az error-log szerint ugyanis egy orosz (.ru) végű hivatkozást próbált meg egy kliens  bevinni a változónévben, ehhez peddig elegendő volt a címsort használnia. Sajnos a naplórészletet letöröltem, nincs meg, pedig jó lenne  megmutatni.

Abban viszont kételkedem, hogy sikerült volna bármit be include-olni, mert szerintem csak file szinten, localhostról húzhat be a php  állományokat. Azért ha lesz kis időm, kipróbálom.

Update:

Ha véletlen bekapcsolva lett volna az allow_url_include beállítás a PHP-ban (alapból kikapcsolt), akkor simán behúzta volna idegen szerverről az állományt!

PHP require_once – na, így nem szabad!
0 szavazat, 0.00 átlagos pontszám (0%-ra értékelve)
3 thoughts on “PHP require_once – na, így nem szabad!

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöljük.