» »

Sql (.NET) problem

Sql (.NET) problem

FXMagic ::

Imam en problem. Imam sql stavek:
string sql = "SELECT * FROM tabela1 WHERE NekoPolje=???? ";

Zdaj pa mene zanima naslednje, ker bom živce zraven zgubil. Kako naj naredim, da bom tam ko so vprašaji lahko uporabil poljubno spremnljivko (string)? Vem, da to deluje:
string sql = "SELECT * FROM tabela1 WHERE NekoPolje='haha' ";

OwcA ::

S sestavljanjem stringov ali posebnim formatiranjem (printf in sorodniki).
Otroška radovednost - gonilo napredka.

Microsoft ::

SqlCommand command = new SqlCommand();
command.CommandType = CommandType.Text;
command.CommandText = "SELECT [id] FROM Table WHERE [Ime]=@ime";
command.Connection = "tvoj koneksn";

command.Parameters.Clear();
commadn.Parameters.AddWithValue("ime", this.boxInput.Text);
...


by Miha
s8eqaWrumatu*h-+r5wre3$ev_pheNeyut#VUbraS@e2$u5ESwE67&uhukuCh3pr

FXMagic ::

Ja, z sestavljanjem stringov že. Samo, sem že vse \"", "\" ipd. probal, pa nikakor ne morem skupaj spravit.

OwcA ::

SqlCommand command = new SqlCommand();
command.CommandType = CommandType.Text;
command.CommandText = "SELECT [id] FROM Table WHERE [Ime]=@ime";
command.Connection = "tvoj koneksn";

command.Parameters.Clear();
commadn.Parameters.AddWithValue("ime", this.boxInput.Text);

OMFG! :(

string sql = "SELECT * FROM tabela1 WHERE NekoPolje="+moja_vrednost;

ali
string sql = String.Format("SELECT * FROM tabela1 WHERE NekoPolje={0}", moja_vrednost);

Slednje je meni bolj všeč.

V kolikor moja_vrednost ni string, jo je treba seveda še pretvoriti.
Otroška radovednost - gonilo napredka.

Zgodovina sprememb…

  • spremenilo: OwcA ()

Microsoft ::

Kaj si ti bukov al kaj? Tvoj prvi primer je itak najslabsi, kar si ga je kdaj clovestvo izmislilo. Je pa po drugi strani res, da si naredil idealen primer za kak sql injection.



by Miha
s8eqaWrumatu*h-+r5wre3$ev_pheNeyut#VUbraS@e2$u5ESwE67&uhukuCh3pr

OwcA ::

Če hočeš eleganco, delaš z ORM, ostalo je v vsakem primeru packanje.

Je pa po drugi strani res, da si naredil idealen primer za kak sql injection.

Vidiš, to je pa zato, ker je moji kristalni krogli zmanjkalo baterij in nisem vedel, da tlači notri nepreverjene vnosne podatke, ki so že privzeto nek splošen niz znakov.

Ko smo že pri injection-u, si prepričan, da ga ne moreš tudi pri tvojem načinu narediti. Nekako dvomim, da gre stvar simulirati poizvedbo in si na podlagi analize ukaza izračuna pričakovan vzorec spremembe v bazi.
Otroška radovednost - gonilo napredka.

Zgodovina sprememb…

  • spremenilo: OwcA ()

CWIZO ::

owca: kolikor jest vem imajo razni command objecti vgrajene anti sql injection mehanizme.
In nacin k ga je Miha podal je tut the way to go.
hancic.info
I can't uninstall it, there seems to be some kind of "Uninstall Shield"...

OwcA ::

Mnja, če se gremo varnost, se mi zdi precej bolj pomembno preverjanje vhodnih podatkov in premišljeni privilegiji. Prvo načeloma tako ali tako pride prav tudi pri sami logiki. Hkrati je boljše, da se naučiš snovati čim bolj robustne programe, ne pa da se zanašaš izključno na orodja. Ker potem enkrat programiraš na neki drugi platformi ali z drugimi orodje in napišeš živi obup.
Skratka, napasti nekoga, ki očitno uči osnov z vsem API-jem kar se da, se mi zdi rahlo zgrešeno, ampak po tehtnem premisleku dopuščam, da se glede tega motim. Vseakor je res, da bi bilo od mene korektno, da bi vsaj izpostavil nevarnosti.
Otroška radovednost - gonilo napredka.

CWIZO ::

Seveda, treba pisat programe tko kot se zagre.
Vsekakor pa je Mihov nacin veliko bolj varen kot tvoj primer (s predpodstavko da poprej podatkov ni noben sfiltriral).
hancic.info
I can't uninstall it, there seems to be some kind of "Uninstall Shield"...

Microsoft ::

...ne pa da se zanašaš izključno na orodja.

Tu sem jaz drugacnega menja. Lep primer bi bil enkripcije in izdelovanja nekega lastnega algoritma, ker sha1 ni dosti dober.
Zdej je odvisno, a ti mislis delat program/algoritem/whatever, ki bo sposoben nekega filtriranja ali pa bos zacel uporabljat ze vgrajene moznosti. V prvem primeru bos res poznal filtriranje do potankosti, a hkrati bos cas zapravljal z razvijanjem nekih lastnih resitev. Pri drugi pac ne bos vedel kaj dosti, kako dela v ozadju, pa bos imel zato vec casa za logiko celotnega programa.


by Miha
s8eqaWrumatu*h-+r5wre3$ev_pheNeyut#VUbraS@e2$u5ESwE67&uhukuCh3pr

OwcA ::

Kaj, ko bi prebral cel konktekst? Ne pravim, da greš vse sam izumljat, le de se problema lotiš sistematično in predvsem generično (vsaj dokler to ni v navzkrižju s priporočeno prakso na izbrani platformi).
Otroška radovednost - gonilo napredka.

dudi ::

Microsoft ima prav. Owca, način kot si ga ti opisal je dost grda stvar, poleg tega npr. oracle in SQLServer literalov, ki jih pripopaš ne razpozna kot vhodni argument SQL-a in bo zato optimizator za vsak spremenjen podatek šel parsat SQL. SQL-e, ki jih podaš z vhodnini argumenti (@argument) zna dati v cache in jih ob ponovnem klicu le prebere iz cache-a, kar se ponekod zelo veliko pozna na performansah.

CWIZO ::

Pravi nacin za delo z bazami so ipak stored procedures.
hancic.info
I can't uninstall it, there seems to be some kind of "Uninstall Shield"...


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

SQL problem

Oddelek: Programiranje
141709 (1327) win64
»

C# INSERT statment ne vpise podatkov

Oddelek: Programiranje
111219 (1093) darkolord
»

Napaka pri povezavi z bazo - c#

Oddelek: Programiranje
71019 (883) Mitja Bonča
»

OleDb in visual studio .net

Oddelek: Programiranje
162305 (2084) Kovalchuk
»

c# vprasanje

Oddelek: Programiranje
171861 (1540) user4683

Več podobnih tem