ugrás a tartalomhoz

PHP-MySQL prepared statement biztonság

Hupiedone · 2008. Május. 8. (Cs), 12.27
Sziasztok!

Az lenne a kérdésem, hogy a prepared statementek használata minden sql biztonsági kérdést megold? Mert elvileg el van választva az adat és a végrehajtandó kód... Magyarán ha ilyeneket használok, akkor (sql oldalról) semmilyen ellenőrzést nem igényel a bemenő (külső) paraméter?

Előre is köszönöm a válaszokat!
 
1

Nem

janoszen · 2008. Május. 8. (Cs), 13.15
Nem old meg minden biztonsági kérdést. Irreális azt gondolni, hogy egyszer megcsinálod a védelmet és utána hátradölhetsz és tehetsz az egész témára. Konstans módon mindig át kell gondolni, hogy ami bejön, átmegy, kimegy, annak mik a biztonsági vonzatai.
2

Köszönöm!

Hupiedone · 2008. Május. 8. (Cs), 14.11
Köszönöm válaszod! Természetesen nem akartam "hátradőlni". Igazán azt szeretném tudni (amire tulajdonképpen sehol se írták meg a választ), hogy megoldást jelent-e a prepared statement az sql injection problémájára akkor, ha a szerverrel nem én rendelkezem (tehát mondjuk adott esetben nem számít, ha valaki 10MB szöveget akarna beírni a fórumba, mert a szerver rögtön visszadobja és nem megfekszik tőle). Biztonságban érezheti-e magát nagyjából az ember, vagy ez is csak olyan ideig-óráig tartó hamis biztonságérzet, mint anno a magic_quotes?
3

Nem

janoszen · 2008. Május. 8. (Cs), 15.21
A frontenden szűrnöd kell, ez tény. Minden normális adatbázis absztrakció támogat bind-olást, vagy prepared statementeket, vagy hasonlókat. Ezek azért mások, mint a magic quotes, mert az adott connection karakterkészletéhez alkalmazkodnak, nem csak általánosan próbálják megoldani a problémát.

Hozzáteszem, hogy pl UTF-8 esetén a magic quotes/addslashes is működik, mert a visszaper jel nincs benne egyetlen multibyte karakterben sem, tehát nem lehet ilyen jellegű exploitokhoz fölhasználni, ha mondjuk mindent macskakörmök között küldesz. A big5 esetén ez pl már nem igaz.

Alapvetően érdemes az arra kitalált függvényeket (mysql(i)_real_escape_string és a barátai) arra használni, amire valóak, ez valószínűleg a legbiztonságosabb út.

Ezen felül állandó jelleggel figyelni kell XSS,CSRF, stb támadásokra, tehát az SQL injection, amelyet a legegyszerűbb kivédeni, ha jól dolgozol, a legkissebb veszélyforrás.