Upravo ovih dana pokusavam da se zastitim od potencijalnih upada po principu sql injection. Verovatno vec znas, ali ipak cu pomenuti (mozda neko ko cita nije upoznat) jedan primer kako se moze zloupotrebiti post i get u kojima stoje parametri za upit ka bazi.
Recimo logovanje korisnika. Unosi se username i pass, zatim se stingovi ubacuju u query.
$query = "SELECT * FROM users WHERE username='$username' AND password='$password'";
Cilj je da nakon username postoji nastavak koji ce omoguciti OR ''=''. Na taj nacin nista jednako nista vraca svakako true ili num_rows veci od nula (dobro je staviti ako je jednak jedan jer se i ocekuje samo jedan takav korisnik) sto je uglavnom uslov koji se pokusava ispuniti u sledecih nekoliko linija.
Dakle unosenjem za password:
Code:
' OR ''='
Dobija se sledece:
Code:
$query = "SELECT * FROM users WHERE username='pera' AND password='' OR ''=''";
Varijacija ima mnogo i sve imaju isti ili slican cilj, a to je da urade nesto za sta korisnik nije autorizovan.
Resenje je da koristis funkcije kao sto su stripslashes i mysql_real_escape_string (mozda jos neke?). Pregledaj sta se izvrsava tamo gde je upucen order itd. Konkretno sa ovim ORDER BY mislim da nista znacajno nije postignuto osim mozda ispipavanja..