Mivel egy elég fontos témakör (és junior állásinterjún szeretik kérdezni is) íme összegezve néhány biztonsági javaslat (a teljesség igénye nélkül):
Bemenetek vizsgálata
Ha számot vársz akkor kasztold, ha szöveget akkor regex-el vizsgáld, stb
Tehát pl szám esetén:
$model_obj->where("id", "=", (int)$id);
SQL injection védelem
Vizsgáld a bemenetet és escape-eld a stringeket
mysql_escape_string($szoveg)
Vizsgálj mindig jogosultságot
Ne sajnáld a processzoridőt, minden lekérdezésnél vizsgáld, hogy megfelelő jogokkal rendelkezik-e a látogató a rendszeredben
Éles oldalon display_error = off
Ez üzemeltetés – de azon túl, hogy nem esztétikus még hackerkedő hangulatúaknak is kedvet adhatsz a mókázáshoz, ha látják a hibaüzeneteket
Használj hosszú jelszavakat
Nem éppen php dolog, de előfordul, hogy ftp-n vagy bárhogy belemódosítanak a saját php file-jaidba, ha rájönnek a jelszavaidra.
File post-kor vizsgáld a file formátumát
És mindig ellenőrizd, hogy a szerver .tmp-re varázsolja-e át a nevét amikor azt a temp mappába rakja, nehogy egy illegális php feltöltésekor futtatni tudja azt
Használj htmlspecialchars-t vagy strip_tags-et
olyan helyre, ahol a felhasználó korábbi szövege másoknak megjelenik. Ezzel megakadályozod, hogy <script> tag-et (vagy rosszabb esetben <?-t) használhasson.
Külön user-ként fuss!
Ez inkább már üzemeltetés – de figyelj arra, hogy egy weboldal egy külön user nevében fusson a szerveren (és az még véletlenül se root legyen), hogy ha még azt az egy oldalt fel is nyomják, ne férjenek hozzá más oldalhoz, vagy az egész filerendszerhez.
Sózd a jelszavakat és még kliensoldalon titkosítsd, vagy használj https-t
Igen, lehallgathatók az oldalak kommunikációi, ha hagyományos http protokollt használ az oldalad. És adatbázisba se plain text-be mentsd el őket…! 🙂
Különítsd el a meghívható és a futthatható file-okat
Figyeld, hogy a file hogyan lett megnyitva. Vizsgáld pl a config.php-ban, hogy ha a file közvetlenül lett meghívva akkor azonnal exiteljen ki.
pl definiálsz a futtatható elejére egy START makrót és a include-olt file-ok elején vizsgálod:
!defined(‘START’) ? exit(‘Access Denied’) : NULL;
Szükség esetén titkosítsd a php kódodat is és éles oldalad forrását ne add tovább
Így még feltörés esetén sem tudnak belemódosítani úgy, hogy észrevétlenek maradjanak. Ja és visszafejteni se tudják.
Figyeld a felhasználók által feltöltött anyagok valódiságát
Ha a felhasználónak megengeded, hogy pl saját képet illesszen be az oldaladra akkor beillesztéskor vizsgáld a kép url header-ét. Olyat is láttam már, hogy egy olyan url-t raktak be, amit átengedett a kép url-t validáló, de aztán a link 301-et dobott és átirányított a logout.php-ra
Ekkor az történt, hogy mivel a böngésző meg akarta jeleníteni a fake image-t megjelenítés helyett mindig vissza kijelentkeztette a user-t az oldalról…
N+1
Ha javítasz, debugolsz, fejlesztesz ne éles rendszeren csináld. Töltsd le localhostra, vagy ha nagyon kemény vagy tartsd fenn a szerveren, de készítsd róla egy másolatot egy almappába és azon ügyködj. Senkinek sem jó az, hogy miközben fejlesztesz addig vacakol az oldal…