Egy nyilvános szerveren futó PHP program futtatásának a biztonságossá tétele rendkívül fontos dolog, és két tényezőn, a szerver beállításain és a programozó gondosságán is múlik.
Bemenő adatok ellenőrzése és szűrése
A bemenő adatokat két oldalon kell ellenőrizni.
A kliens oldalon a formok adatbevitelének felprogramozásával
A szerver oldalon a már elküldött adatok érvényességének vizsgálatával
Kliens oldali ellenőrzés
A user oldal csak arra való, hogy a felhasználó hibáit küszöbölje ki illetve minimalizálja.
Az adatbevitel tipikusan egy formon keresztül zajlik, tehát a formon való adatbevitelt lehet ellenőrizni. Erre a célra Javascript kódot használhatunk, illetve a HTML 5-ben megjelent különböző beviteli mező fajtákat (pl. NUMBER) használhatjuk, ellenőrizhetjük, hogy formailag megfelelnek-e a bevitt adatok bizonyos feltételeknek, előírhatunk kötelezően kitöltendő mezőket. és a Javascript kód ezek teljesülését ellenőrzi.
Erre a Form submit gombjára eseménykezelőt hozhatunk létre tisztán javascript vagy jQuery library segítségével.
Általában lefuttathatunk minden mező tartalmának változására eseménykezelőt, amellyel a formális feltételeket ellenőriztethetjük.
Ezeket az ellenőrzéseket validálásnak hívjuk!
A HTML Formoknál az alábbi beviteli mezők a leggyakoribbak:
Input mezők
Text – ellenőrizni kell a tartalmát
Textarea – ellenőrizni kell a tartalmát
Checkbox – ellenőrizni lehet - ki van-e kapcsolva vagy be van kapcsolva
RadioButton – célszerű ellenőrizni - van-e kiválasztott a lehetőségek között.
Select menü – a kiválasztottságot célszerű ellenőrizni - van-e kiválasztott a lehetőségek között
File mező – Igazából a file létezését ellene ellenőrizni, de nem illik. Csak annyit lehet, hogy a file mezőben van-e valamiféle bejegyzés.
A fentiek alapján látszik, hogy egyszerű esetben csak a text és a textarea ellenőrzése igazán fontos. Ott ellenőrizhetjük a string hosszát, azt hogy bizonyos karakterek benne vannak-e vagy nincsenek. Megvizsgálhatjuk, hogy a bevitt adat numerikus-e, és ha igen, akkor milyen tartományba esik.
Minden esetben érdemes default értéket bejelölni az értékeknél.
Szerver oldali ellenőrzés
A szerver oldalon már formálisan ellenőrzött adatot kapunk, miért kell a szerver oldalon ismételten ellenőrizni?
A kliens oldali ellenőrzés a felhasználói hibákat szűri ki és elsősorban a felhasználói élmény miatt érdemes használni. Ilyen módon rövid idő alatt kiderülnek a fatális felhazsnálói hibák.
A szerver oldali ellenőrzés a sanda szándékok elkapására való, hogy a program működését ne lehessen megzavarni, illetve ne lehessen meghekkelni a weboldalt.
A szerver oldalon mindent ellenőriznünk kell
Vannak-e elvárt adatok
A beküldött változók értékét - benne van-e az elvárt tartományban,
A beküldött változók értékeinek formátumát:
Milyen hosszú a string
engedélyezett és elvárt karakterek vannak-e benne
Ki kell szűrni az esetlegesen bevitt HTML tag-eket, a ” és a ’ jeleket,
Az SQL injection lehetőségeit
A beküldött adat numerikus-e, és ha igen, akkor megfelelő-e az értéke.
Fájlok beküldésének ellenőrzése
Ha a felhasználónak engedélyezzük bizonyos fájlok feltöltését a szerverre, akkor gondoskodnunk kell ezeknek a fájloknak a biztonságos tárolásáról és meg kell akadályoznunk, hogy a webhely feltörésére használják.Az ellenőrzés az alábbiakat jelenti:
A PHP.INI megfelelő (biztonságos) beállítása: A PHP csak megadott területeket érjen el.
Biztonságos kapcsolatok, kapcsolati módok használata
Csak bizonyos típusú fájlokat lehessen feltenni: (pl. képek, pdf-ek). futtatható fájlok feltöltésének engedélyezése meglehetősen problémás!
Méretkorlátozás
A szerverrel megfelelő .htaccess fájlok segítségével az elérhetőséget korlátozzuk.