Autor | Zpráva | ||
---|---|---|---|
KubaFibi Profil |
#1 · Zasláno: 21. 6. 2012, 11:58:12
$id = "1 OR 1=1 --"; $psw = "123"; $dotaz = "SELECT * FROM uzivatele WHERE id=$id AND password='$psw'" SELECT * FROM uzivatele WHERE id=1 OR 1=1 -- AND password='123'
a ten je ekvivalentní s SELECT * FROM uzivatele
1) Stačilo by jako ošetření toto: ? $id = "1 OR 1=1 --"; $psw = "123"; $dotaz = "SELECT * FROM uzivatele WHERE id='$id' AND password='$psw'"; popř. $dotaz = "SELECT * FROM uzivatele WHERE id='".$id."' AND password='".$psw."'"; SELECT * FROM uzivatele WHERE id='1 OR 1=1 --' AND password='123'
Má ten apostrof, uvozovka, tečka ('".promenna."') nějaký význam nebo je to stejné jako v prvním případě? 2) Který dotaz je lepší? 3) Způsobí můj dotaz i to, že nebude potřeba escapovat znaky? 4) Dá se to udělat lépe? |
||
Kajman Profil |
#2 · Zasláno: 21. 6. 2012, 12:18:47
$dotaz = "SELECT * FROM uzivatele WHERE id=".(int)$id." AND password='".mysql_real_escape_string($psw)."'"; |
||
Keeehi Profil |
#3 · Zasláno: 21. 6. 2012, 12:19:18
|
||
KubaFibi Profil |
#4 · Zasláno: 21. 6. 2012, 12:28:46
díky, úplně jsem zapoměl na možnost, že by tam někdo napsat '
takže (int)$id definuje že to musí být číslo? A když by nebylo zadáno číslo, co se tam doplní? NULL? mysql_real_escape_string() escapuje znaky to už vím. Pak jsem ještě četl o funkci intval(), ale moc jsem nepochopil k čemu se to v tomto případě hodí. |
||
Keeehi Profil |
#5 · Zasláno: 21. 6. 2012, 12:34:33
(int)$id je přetypování. Pokud je tam něco jiného než číslo, bude z toho nula.
intval() dělá vlastně to samé, akorát, že je to funkce |
||
Časová prodleva: 12 let
|
0