PHP kézikönyv
Előző |  | Következő

# 24. Fejezet. CGI futtatható állományként telepített PHP

# Lehetséges támadások

A PHP CGI futtatható állományként való használata egy telepítési lehetőség azok számára, akik valami oknál fogva nem szeretnék a PHP-t modulként a szerverbe integrálni (pl. Apache), vagy a PHP-t más CGI wrapper-ekkel szeretnék használni biztonságos chroot és setuid környezet kialakítása érdekében. Ez a forma magával vonja azt, hogy a PHP a szerver cgi-bin könyvtárába legyen telepítve. A CERT advisory CA-96.11 azt tanácsolja, hogy ne tegyél feldolgozó (interpreter) programot a cgi-bin könyvtárba. Bár a PHP használható mint egy egyedülálló feldolgozó program, a PHP-t úgy tervezték, hogy az ilyen telepítésekből adódó támadásokat kivédje:

- Rendszerfájlok elérése: `http://domain.nev/cgi-bin/php?/etc/passwd`

  Az URL lekérési információja (query information), ami a kérdőjel (?) után található, parancssori paraméterként kerül átadásra a feldolgozónak. Általában a feldolgozók megnyitják, és lefuttatják az első paraméterként adott fájlt.

  Ha a PHP CGI futtatható állományként hívódik meg, nem veszi figyelembe a parancssori paramétereket.

- Bármilyen web dokumentum elérése a szerveren: `http://domain.nev/cgi-bin/php/titkos/doc.html`

  Az elérési út információ (path information) az URL része, a futtatható fájl neve után lévő `/titkos/doc.html` a CGI program által megnyitásra és futtatásra kerülő fájl elérésének meghatározására használatos. Tipikusan néhány webkiszolgáló beállítási lehetőség (Apache-ban: Action) használatos a kérések átirányítására a dokumentumhoz, mint a `http://domain.nev/titkos/szkript.php` a PHP értelmező számára. Ezzel a beállítással a szerver először ellenőrzi az elérési engedélyeket a `/titkos` könyvtárra, és ezután állítja elő az átirányító kérést a `http://domain.nev/cgi-bin/php/titkos/szkript.php` oldalra, amit így már a PHP feldolgoz. Azonban ha eredetileg is ebben a formában volt megadva a kérés, nem történik elérési ellenőrzés a `/titkos/szkript.php` fájlra, csak a `/cgi-bin/php` fájlra. Ilyen módon bárki, aki elérheti a `/cgi-bin/php` címet, egyben tetszőleges védett dokumentumot is elérhet.

  A PHP esetében az --enable-force-cgi-redirect fordítási paraméter, a doc_root és user_dir konfigurációs lehetőségek használhatóak ennek kivédésére, ha a szerver dokumentumainak könyvtárfájában van olyan könyvtár, ami elérési korlátozásokkal bír. Nézd meg az alábbi lehetőségeket a különböző kombinációkhoz!

Előző | Tartalom | Következő
Általános szempontok | Fel | 1. eset : csak publikus fájlok