5. Fejezet. Biztonság

Tartalom
Általános szempontok
CGI futtatható állományként telepített PHP
Apache modulként telepített PHP
Fájlrendszer biztonság
Adatbázis biztonság
Hibakezelés
Globálisan is elérhető változók (Register Globals) használata
Felhasználótól érkező adatok
A PHP elrejtése
Fontos aktuálisnak maradni

A PHP egy igen hatékony nyelv és feldolgozó program, akár kiszolgálómodulként, akár egy különálló CGI futtatható állományként működik. Képes elérni fájlokat, futtatni parancsokat és hálózati kapcsolatokat nyitni a szerveren. Ezek a tulajdonságok alapesetben veszélyessé is tehetik más, a webszerveren futó alkalmazások számára. A PHP-t azonban úgy fejlesztették, hogy biztonságosabb legyen CGI programok írására, mint a Perl vagy C nyelvek. A PHP a fordítási és futásidejű beállítások helyes megválasztásával, és megfelelő programírási módszerek betartásával a szabadság és biztonság kívánt kombinációját biztosítja a fejlesztők számára.

Mivel sokféleképpen és sok mindenre lehet használni a PHP-t, számos konfigurációs lehetőség van a működésének szabályozására. A lehetőségek nagy száma garantálja, hogy a PHP-t sokféleképpen fel lehet használni, de egyben azt is jelenti, hogy ezek és a webkiszolgáló beállításainak kombinációi kritikus helyzeteket teremthetnek.

A beállítások sokszínűsége egyenlő mértékű a kódok sokszínűségével. A PHP használható teljes szerver-alkalmazások készítésére, egy shell felhasználó minden lehetőségével, vagy használható egyszerű 'server side include'-oknál, kis kockázattal egy szigorúan ellenőrzött rendszerben. Az, hogy hogyan kell kialakítani egy környezetet, milyen biztonságosan, nagyban a PHP fejlesztőn múlik.

Ez a fejezet néhány biztonsági tanácsot tárgyal, a különböző beállítási lehetőségeket és azokat a helyzeteket tárja fel, amelyekben ezeket biztonsággal lehet használni. Utána néhány kódolási szempontot is érint a különböző szintű védelem szempontjából.

Általános szempontok

A teljesen biztonságos rendszer kialakítani tulajdonképpen lehetlen, ezért a védelmi szakterületen alkalmazott megközelítés a kockázat és a használhatóság közti egyensúly megteremtésére törekszik. Ha minden a felhasználó által küldött adat két biometrikus érvényesítést (pl. retina- és ujjlenyomatvizsgálatot) igényel, akkor igen magas szintű a rendszer "felelősségre vonhatósága" (accountability). Ez azonban azt jelentené, hogy félórába telne kitölteni egy meglehetősen összetett űrlapot, ami arra ösztökélné a felhasználókat, hogy valahogy megkerüljék ezt a védelmet.

A legjobb védelem gyakran a kevésbé alkalmatlankodó és nem annyira feltűnő fajta, amely megfelel a követelményeknek anélkül, hogy megakadályozná a felhasználókat a munkájuk elvégzésében vagy túlterhelné a program íróit annak túlzott mérvű bonyolultsága. Valójában néhány biztonsági támadás pusztán a kiaknázása az olyasfajta túlságosan is kiépített védelemnek, amely hajlamos elerodálódni az idővel.

Egy mondatot érdemes megjegyezni: A rendszer csakis annyira jól védett, amennyire a leggyengébb láncszeme. Ha minden tranzakcióról feljegyzés készül idő, hely és tranzakciótípus alapján is, de a felhasználót csak egy egyszerű süti (cookie) alapján azonosítja a rendszer, akkor a felhasználók és a naplózott tranzakciók közti összefüggések érvényessége, megbízhatósága igen gyenge.

Tesztelés során figyelembe kell venni, hogy képtelenség minden lehetőséget kipróbálni már a legegyszerűbb oldalak esetén is. A programozó által várt adatok teljesen különbözőek azoktól és minden összefüggést nélkülöznek azokkal, amelyeket egy zsémbelődő alkalmazott képes elküldeni, vagy amelyeket egy szoftverkalóz (cracker) több havi munkájával állít össze, vagy amit egy házimacska a billenytyűzeten végiggyalogolva bevisz. Ezért a legjobb a programot logikai nézőpontból megközelíteni, hogy sikerüljön észrevenni, hol jöhetnek elő nem várt adatok és azok a továbbiakban hogyan módosulhatnak, tűnhetnek el vagy erősödhetnek fel a hatásuk.

Az Internet tele van olyan emberekkel, akik azzal akarnak maguknak nevet szerezni, hogy feltörik az oldalaidat, tönkreteszik a programjaidat, nem helyénvaló tartalommal töltik fel azokat, mellesleg egy - két izgalmas(?) napot szerezve ezzel Neked. Nem számít, hogy kis vagy nagy webhelyről van szó, elég indok a támadásra, hogy az rá van kapcsolva a hálóra, van egy szerver, amelyhez csatlakozni lehet. Sok kódtörő program nem foglalkozik a méretekkel, egyszerűen csak nagy mennyiségű IP blokkokra vadászik áldozatokat keresve ezzel magának. Próbálj meg nem egy lenni közülük!