Weboldalak biztonsága

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…

Szólj hozzá!