Felhasználótól érkező adatok
A legtöbb probléma sok PHP programban nem a nyelvben rejlik, hanem abból fakad, hogy a kód nem a biztonságosságot szem előtt tartva készült. Emiatt mindig kellő időt kell szánni annak ellenőrzésére, hogy egy adott kódrészletre milyen hatással lehet egy váratlan hibás adat.
Example#1 Veszélyes változóhasználat
<?php
// egy fájl törlése a user könyvtárából... vagy
// talán valaki máséból?
unlink ($ordogi_valtozo);
// Az elérés naplózása... vagy egy /etc/passwd bejegyzésé?
fputs ($fp, $ordogi_valtozo);
// Valami egyértelmű dolog futtatása.. vagy rm -rf *?
system ($ordogi_valtozo);
exec ($ordogi_valtozo);
?>
Mindig alaposan meg kell vizsgálni a felhasználók által beadott adatokat, feltéve a következő kérdéseket:
- Biztos, hogy ez a szkript csak a kÃvánt fájlokat fogja módosÃtani?
- ElÅ‘fordulhat egy ponton, hogy szokatlan vagy nem kÃvánatos adat jelenjen meg?
- Használható-e az adott szkript nem kÃvánatos formában?
- Felhasználható-e más szkriptekkel együtt egy negatÃv hatás elérésére?
- Megfelelően naplózásra kerülnek-e a tranzakciók (elérések, változtatások)?
KellÅ‘képpen átgondolva a fenti kérdéseket a szkript Ãrásakor, megkÃmélhet attól, hogy késÅ‘bb végiggondolva a problémákat szerencsétlen módon újra kelljen Ãrni a teljes kódot a védelem növelése érdekében. Ezzel sem lehet garantálni a rendszer biztonságát, de segÃthet annak növelésében/ fenntartásában.
SzámÃtásba lehet venni a register_globals, magic_quotes és más kényelmi szolgáltatások kikapcsolásának a gondolatát is, mivel ezek megfosztanak az adatok forrásának, helyességének, tartalmának ismeretétÅ‘l. A PHP*t maximális hibajelentési szinten használva - az error_reporting E_ALL beállÃtásával - figyelmeztetést ad elÅ‘zetes érték nélküli, definiálatlan változókról, ezzel védve attól, hogy véletlenül hibás adatokkal dolgozzon a program.