[ cesare @ 25.11.2011. 11:29 ] @
Pozdrav svima !!!!

Pisem program u C# koji koristi MySQL bazu. Gde mogu pronaci listu karaktera koje MySQL koristi u svom radu, npr. karakter ' sluzi za razdvajanje vrednosti polja kada se bazi prosledjuje upit iz programa. Zeleo bih da korisnike u svom programu onemogucim da unose ove karaktere, kako bi se izbegle greske u radu programa ili da ih nekako "konvertujem" (dupliram npr.) prilikom unosa, a kasnije "vratim" u prvobitno stanje kod citanja iz baze.

Unapred hvala ...
[ bogdan.kecman @ 25.11.2011. 11:44 ] @
nemoj to da radis!!!

sta ako korisnik ima u imenu apostrof (npr O'Reilly ) ...

Koristi PREPARED STATEMENTS, tako ces biti siguran da ce sadrzaj koji hoces da upises u bazu biti sigurno upisan u istu, ne moras da brines o apostrofima, zarezima, --ima i slicno

Citat:
mysql documentation:
C# example:
Code:

  private void PrepareExample()
  {
    MySqlCommand cmd = new MySqlCommand("INSERT INTO mytable VALUES (?val)", myConnection);
    cmd.Parameters.Add( "?val", 10 );
    cmd.Prepare();
    cmd.ExecuteNonQuery();
    
    cmd.Parameters[0].Value = 20;
    cmd.ExecuteNonQuery();
  }


[ vbbojan @ 25.11.2011. 11:49 ] @
Progooglaj:

1. Čišćenje user inputa za SQL zove - Sanitizing
2. A "konvertovanje / dupliranje " karaktera tako da mogu bezbedno da se prolsede se zove - Escaping,
Baci pogled ovde na primer: http://dev.mysql.com/doc/refman/5.0/en/string-syntax.html

Ako se malo potrudiš, sigurno ćeš naći već gotova rešenja i za C#.

Pozdrav.


[ vbbojan @ 25.11.2011. 11:58 ] @
Bogdan me preteče.

Dao ti je konkretno rešenje za tvoj problem.
Ovde se upravo ispod haube radi "escaping" specijalnih karaktera.
Nije loše da znaš šta se dešava ispod haube.

Edit: Lupih i ostadoh živ. Prepared Statement kod .NET konektora ne radi escaping, ovde je protokol je binaran.

@Bogdan
Vidi ti čoveka, nisam očekivao da ćeš da prljaš ruke sa .nemoj kodom :-)
[ bogdan.kecman @ 25.11.2011. 12:07 ] @
Citat:
vbbojan
Vidi ti čoveka, nisam očekivao da ćeš da prljaš ruke sa .nemoj kodom :-)


nisam ja pisao :D .. copy & paste sa stranice sa nase stranice sa dokumentacijom :D ima u vrhu i link na doticnu stranu ako hoce da procita malo vise o tome ...

Sto se tice sanatizacije input-a, treba odraditi uvek semanticku sanatizaciju, dakle ako negde ocekujes broj a dobijes slova razmislis sta je korisnik hteo, dal je debil ili je haker, i u jednom i u drugom slucaju ne treba mu pristup ... dako ocekujes ime i prezime a dobijes 2k teksta ... i slicno .. semanticku sanatizaciju obicno vezes sa nekim server side security pa recimo taj sto je poslao 2k za ime i prezime dobije 24h ip ban za tvoj server .. pa neka smara nekog drugog .. i slicno ..

Sintaksnu sanatizaciju treba da radi konektor - da li ce da radi server side preparaciju ili client side nije preterano bitno, svi mysql konektori (i .not i java i c i c++ i php i ..) rade to vrlo brzo i vrlo dobro .. razni mysql_safe() i slicni sanatizatori su bili potrebni za 3.xx i 4.xx za 5.x to vec jako dugo nije potrebno... naravno potrebno je odraditi upgrade na nove konektore etc etc .. (na primer ovi php skripteri i danas koriste mysql_*() funkcije koje su i za 4.1 zastarele a ne za 5.5 ... ali ..)