SQL lekérést károsító hibák lekezelése
Sziasztok!
Van egy táblám tele adatokkal. Az első mező (id) integer típusú, index és automatikusan nő az értéke új adatoknál. GET-es kérelem formájában megkapja a sorszámot (id-et), hogy mit jelenítsen meg. Ezzel csak akkor vagyok gondban, ha eljátszom az oldalt megbontó, rosszindulatú látogatót...
Mondjuk, kézzel azt írja be, hogy: index.php?valami=14h24
1. megoldáskimenet: megjelenik a 14. sor adatai
2. megoldáskimenet: Hiba! 1054: Unknown column '14h24' in 'where clause'
Ez persze a leegyszerűsített vázlat...
Mi lenne a legjobb megoldás?
Szűrjek meg minden egyes változót? 1054 hibához rendeljek egy olyan üzenet, mintha nem adatna vissza semmit se a lekérés?
Érdemes 4 fokozatú hibaüzenet rendszert bevezetni?
Jelenleg van: tájékoztató üzenet, hibaüzenet, kritikus hibaüzenet
Legyen-e: „hacker” üzenet (ez nem a program hibája és egy normális felhasználó sem tudna ilyet produkálni)
■ Van egy táblám tele adatokkal. Az első mező (id) integer típusú, index és automatikusan nő az értéke új adatoknál. GET-es kérelem formájában megkapja a sorszámot (id-et), hogy mit jelenítsen meg. Ezzel csak akkor vagyok gondban, ha eljátszom az oldalt megbontó, rosszindulatú látogatót...
Mondjuk, kézzel azt írja be, hogy: index.php?valami=14h24
1. megoldás
"SELECT * FROM tabla WHERE id=’".$valami."’"
2. megoldás
"SELECT * FROM tabla WHERE id=".$valami
Ez persze a leegyszerűsített vázlat...
Mi lenne a legjobb megoldás?
Szűrjek meg minden egyes változót? 1054 hibához rendeljek egy olyan üzenet, mintha nem adatna vissza semmit se a lekérés?
Érdemes 4 fokozatú hibaüzenet rendszert bevezetni?
Jelenleg van: tájékoztató üzenet, hibaüzenet, kritikus hibaüzenet
Legyen-e: „hacker” üzenet (ez nem a program hibája és egy normális felhasználó sem tudna ilyet produkálni)
Ajánlás
A felhasználói visszajelzések maradhatnak ugyan ilyen szintűek, ez jelen esetben a hibaüzenet kategóriába esik.
Képzeld el a következőt:
De tehetne mást is, ez csak egy példa volt. Például így olyan adatokhoz férhet hozzá, amit nem szeretnél publikussá tenni.
nem jó példa ;)
Felhő
összes POST és GET változó ellenőrzése
( http://www.php.net/manual/hu/security.database.php Ez a link segítet a legtöbbet, ha másnak is szüksége lennem rá... Miért nem a manuállal kezdtem? :-) )
A POST-os változókat már régóta ellenőrzőm, de a GET-eseket nem olyan alaposan...
Az összes GET-es változót így a legegyszerűbb ellenőrizni?
$_GET['valami']
$HTTP_GET_VARS['valami']
Ha végig lépkedek a tömbön és módosítom az értékeit, akkor változik a $valami értéke is?
A számok esetében elég egy intval($valami), mert az is_int($valami)-nál stringként (gettype-vel ell.) szerepel (még ha számsor is)?
ennél azért kicsitt összetettebb a téma
pg_escape_string()
függvény nem figyel a ; jelre, vagy egy keresésnél nyugodtan megadhat valaki % jelet a szövegben, amivel jelentős errőforrást vehet el a szervertől, és a sima escape függvények nem fogják kiszűrni Neked.Felhő
u.i. Van egy ilyen cucc is: SafeSQL