Hogyan védjem meg az összes SQL Query-t egy oldalon Injection ellen?
Milyen oldalon van több ezer query?
Le kell cserélni normális paraméterezett query-kre, vagy valami hasonló technológiára, az a legbiztosabb.
Olyan ami biztos és 100% -ig mindet kizár, nincs!
Az összes POST/GET/REQUEST/COOKIE -n átlehet menni,
és minden elemet végig escape() -elni.
De az se véd meg mindentől!
pl. ha "SELECT * FROM `users` WHERE `user`='{$user}' AND `password`="{$pass}" ;" -van,
akkor ha pl. ' or 1 or '1 -et ad meg beviteli mezőbe escape() nélkül a feltétel igaz lesz.
SELECT * FROM `users` WHERE `user`='' or 1 or '1' AND `password`="akarmi" ;
De pl. az escape() -se segít ha ilyen az SQL:
"SELECT * FROM `table` WHERE `id`={$id} ;"
Ha itt az ID -nak szinte bármit megadhatunk, és új SQL utasítást is hozzá fűzhetünk.
Csak szerver beállítástól függ meddig juthat el a próbálkozó.
Szóval fapados megoldás escape() minden GET/POST... -ra,
illetve ugyan így a legelején trimmelni az olyan paramétereket ahol számokat ID -t vár, hogy véletlen se adjunk tovább Injectionra lehetőséget.
Persze ezek listája is sok lehet, és csak elég egyet elfelejteni.
"Olyan ami biztos és 100% -ig mindet kizár, nincs!"
Hát azért ez nagy baromság, SQL Injection ellen azért nem olyan nehéz védekezni.
Mint írtam, ha paramétereket használsz, akkor az SQL szerver megteszi.
Ebben eseteben most igaz, hogy nem lesz semmilyen megoldás sem 100%-os, ha csak magukat a query-ket akarja escapelni.
Paraméterezett lekérések és akkor jó lesz.
Így utólag tákolni ez már jobb sokkal nem lesz.
Dehogynem lehet az injection ellen vedekezni. Marha egyszeru. A mysql_query es az osszes mysql_ fv deprecated, illetve a php 7 ota mar nincs is a nyelvben, emiatt ezek kuka es helyette pdo t hasznalj. Pdo ban a prepared statement feladata pont az, hogy a querybe megadod h hol lesznek parameterek es exec kor atadod a parametereket, onnantol kezdve pedig a pdo automatikusan megoldja helyetted az injection vedelmet. Felteve persze ha rendesen hasznaltad es a pdo preparedbe nem irtal bele valtozokat.
Látom nehéz értelmeznetek a problémát! :-D
Kis olvasni való a témáról: [link]
#3, #5, #6: Pont hogy nem akarja az összes SQL lekérdezést újra írni.
Ezért szeretne olyant amivel könnyen megoldja egy helyen, pl. adatbázis kapcsolódás elé be includolva...
Itt csak azt tudja szűrni, hogy milyen GET/POST.. értékeket fogad, és azokat escapelni, trimmelni...
De ez nem 100% -os védelem, csak szűkíti a lehetőségeket a támadásra.
Szóval anélkül hogy átkéne nyálazni esetleg több száz fájlt és SQL -t, sőt újra írni a dolgait, milyen megoldást tudtok javasolni!? :-)
Nem. Ebbe a php maga is belebukott anno amikor a magic_quotes el probalkozott. Gyak ugyanezt akarja most o is megcsinalni. Google, php emulate magic quotes, komplett megoldas lesz ra.
Feluldefinialhatja esetleg meg az elavult mysql query fvt, es azzal mokazhat meg egy kort, de a kerdesbol itelve valszeg tobb kart okoz majd vele mint hasznot. Jobban jarna ha tisztessegesen megcsinalna, nem novelne a kokany phpsok szamat.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!