Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Problem prilikom detaljne pretrage Baze MSSQL - C#2005

[es] :: .NET :: .NET Desktop razvoj :: Problem prilikom detaljne pretrage Baze MSSQL - C#2005

Strane: 1 2

[ Pregleda: 6883 | Odgovora: 30 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

VerbatimBOT
Aleksandar Dragosavac
Senior .NET Developer

Član broj: 84129
Poruke: 228
217.24.18.*



Profil

icon Re: Problem prilikom detaljne pretrage Baze MSSQL - C#200510.08.2006. u 14:28 - pre 215 meseci
Citat:
Radice, ali uopste nije preporucljivo posto je podlozno SQL injection napadima. Dovoljno je da ukucam '; delete from Proizvodi; u bilo koji text box i da ti obrisem tabelu sa proizvodima. SQLParameters ima mehanizam zastite od ovog napada.

Pa ajde probaj tako nešto i videćeš da ti neće uspeti to što si naveo.
Upravo je to i svrha Prepare() metode za SqlCommand, da ako navedeš u tekst polju neku komandu da je NE IZVRŠI.

Izvršio bi je kada bi je sastavljao u slučaju
Code:

komanda.CommandText = "INSERT INTO TABELA VALUES(' + txtIme.Text + ',' + txtPrezime.Text + ')";



Winners never quit, quitters never win.
 
Odgovor na temu

Fedya
Fedor Hajdu
Solution Architect
Emaratech
Dubai, UAE

Član broj: 28246
Poruke: 790
*.ADSL.neobee.net.

Jabber: fedya@elitesecurity.org
Sajt: devtechgroup.com


+34 Profil

icon Re: Problem prilikom detaljne pretrage Baze MSSQL - C#200510.08.2006. u 14:39 - pre 215 meseci
Citat:
mmix: Kao prvo, = operator ne radi sa NULLovima, x = NULL uvek vraca false; Ispravni operator je IS, tj
@par1 is NULL


Da, slazem se, moja greska, zurio sam ;)

A sto se tice stringova, sve su stringovi posto je na pocetku navedeno da koristi
Request.QueryString("Vrsta")
i to nadovezuje kao parametar SqlCommand objektu, bez upotrebe storovane procedure.
Every hamster has his day.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Problem prilikom detaljne pretrage Baze MSSQL - C#200510.08.2006. u 15:31 - pre 215 meseci
Citat:
VerbatimBOT: Pa ajde probaj tako nešto i videćeš da ti neće uspeti to što si naveo.
Upravo je to i svrha Prepare() metode za SqlCommand, da ako navedeš u tekst polju neku komandu da je NE IZVRŠI.



Code:

        [STAThread]
        static void Main(string[] args)
        {
            string emuliranitextBox = "''; delete from TempTable;";

            string command = "select * from TempTable where ";
            if (emuliranitextBox != "")
                command += "Polje = " + emuliranitextBox;
    
            // krajnji rezultat: select * from TempTable where Polje = ''; delete from TempTable;
            SqlConnection conn = new SqlConnection(connectionstring);
            conn.Open();
            SqlCommand cmd = new SqlCommand(command, conn);

            cmd.Prepare();  // iako nema nikakvog efekta, al ajde
            cmd.ExecuteNonQuery();
            conn.Close();
        }


I voila, TempTable je prazan....

Prepare nema efekta na ovu nasu pricu, on poziva sp_prepexec SQL sistemsku proceduru da "kompajlira" i izvrsi skript i ostavi ga u memoriji SQL servera kako bi pri visestrukom izvrsavanju preko sp_execute sa razlicitim parametrima ustedeo na vremenu. Bez Prepare, SQLCommand objekat koristi sp_executesql da direktno izvrsi skriptu sa parametrima, gde sp_executesql interno svaki put pozove sp_prepexec. Efektivno nista te ne sprecava da iskoristis sp_prepexec da izvrsis SQL injection napad. Zastitni sloj je ovde u samom SqlCommand objektu koji pri parsiranju parametara koje ce proslediti u sp_preexec/sp_executesql zamenjuje ' sa '' Ako nema parametara, nema ni parsiranja istih i SQL injection prolazi neotkriven.



Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

VerbatimBOT
Aleksandar Dragosavac
Senior .NET Developer

Član broj: 84129
Poruke: 228
217.24.18.*



Profil

icon Re: Problem prilikom detaljne pretrage Baze MSSQL - C#200510.08.2006. u 15:54 - pre 215 meseci
Code:
cmd.Prepare();  // iako nema nikakvog efekta, al ajde


Pa naravno da nema kada ja celo vreme pricam o PARAMETRIMA komande!
Dakle: Ako se radi preko parametara, npr:
Code:

komanda.Parameters.Add(new SqlDbParameters("prezime", SqlDbType.VarChar, 25));
komanda.Parameters["prezime"].Value = txtPrezime.Text;
//... neki kod
konekcija.Open();
komanda.Prepare();
komanda.ExecuteNonQuery();
konekcija.Close();


Ako ovde probas da uneses u TextBox
Code:

txtPrezime.Text = "''; delete from TempTable;";

dzaba! Nece izvrsiti ovaj delete upit.
Ja sam samo ovo hteo da napomenem!
Winners never quit, quitters never win.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Problem prilikom detaljne pretrage Baze MSSQL - C#200510.08.2006. u 16:45 - pre 215 meseci
Citat:
VerbatimBOT
Pa naravno da nema kada ja celo vreme pricam o PARAMETRIMA komande!
Dakle: Ako se radi preko parametara, npr:

Ajd da ne bude da sam lud , pogledaj svoju originalnu poruku, citirao si poruku od logic_rabbit i rekao da ce to resenje raditi (a njegovo resenje btw ne koristi parametre) na sta sam ja odgovorio da hoce ali je podlozno napadu. Otkud sad pominjes parametre kad ih nema u njegovom resenju (resenje sa paramterima je ponudio Fedya ako se ne varam)...


Citat:
VerbatimBOT: dzaba! Nece izvrsiti ovaj delete upit.
Ja sam samo ovo hteo da napomenem!

SQL Injection napad nece raditi sa parametrima nikad, cak i ako ne pozoves Prepare; sta vise ako text SQL komandu izvrsavas samo jednom nema apsolutno nikakve razlike u funkcionalnosti i performansama izmedju "sa" i "bez" poziva Prepare(). I to je bila moja napomenta, da Prepare() nema nikakve veze sa sprecavanjem SQL injection napada, on jednostavno sluzi za poboljsavanje performansi kada se ista komanda poziva vise puta sa razlicitim parametrima, nista vise. SQL injection sprecava parser parametara u SqlCommand objektu.

Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

VerbatimBOT
Aleksandar Dragosavac
Senior .NET Developer

Član broj: 84129
Poruke: 228
217.24.18.*



Profil

icon Re: Problem prilikom detaljne pretrage Baze MSSQL - C#200511.08.2006. u 08:17 - pre 215 meseci
Hm... neka me neko ispravi ako gresim, ali kako se ovo naziva
Citat:

Mozda je bolje da dinamicki pravis sql upit kao npr.
Code:

if !(Textbox1.text=="")
{
SqlUpit+="AND Vrsta="+@Vrsta
}

Znaci da dinamicki dodajes novi "AND" ako je textbox za unos pun.

ako ne upit sa parametrima?
Kako god, umorio sam se od pisanja... Uostalom, onaj ko je trazio resenje, dobio ga je... tako da je sada svaka rec suvisna.
Winners never quit, quitters never win.
 
Odgovor na temu

Fedya
Fedor Hajdu
Solution Architect
Emaratech
Dubai, UAE

Član broj: 28246
Poruke: 790
*.ADSL.neobee.net.

Jabber: fedya@elitesecurity.org
Sajt: devtechgroup.com


+34 Profil

icon Re: Problem prilikom detaljne pretrage Baze MSSQL - C#200511.08.2006. u 08:23 - pre 215 meseci
if !(Textbox1.text=="")
{
SqlUpit+="AND Vrsta=@Vrsta";
cmd.Parameters.Add("@Vrsta", Textbox1.text);
}

bi bilo sa parametrima ;)

Every hamster has his day.
 
Odgovor na temu

VerbatimBOT
Aleksandar Dragosavac
Senior .NET Developer

Član broj: 84129
Poruke: 228
217.24.18.*



Profil

icon Re: Problem prilikom detaljne pretrage Baze MSSQL - C#200511.08.2006. u 08:44 - pre 215 meseci
Citat:
cmd.Parameters.Add("@Vrsta", Textbox1.text);

Ovo bih podrazumevao. Jer pri kreiranju upita ide
Code:
SqlUpit+="AND Vrsta=@Vrsta";

tako da bi se javila greska (runtime) ukoliko se taj deo koda ne bi naveo.
Winners never quit, quitters never win.
 
Odgovor na temu

mmix
Miljan Mitrović
Profesorkin muz
Passau, Deutschland

SuperModerator
Član broj: 17944
Poruke: 6042



+4631 Profil

icon Re: Problem prilikom detaljne pretrage Baze MSSQL - C#200511.08.2006. u 13:03 - pre 215 meseci
Citat:
VerbatimBOT: Ovo bih podrazumevao. Jer pri kreiranju upita ide
Code:
SqlUpit+="AND Vrsta=@Vrsta";

tako da bi se javila greska (runtime) ukoliko se taj deo koda ne bi naveo.


Ah sad vidim gd je nastala konfuzija, on je zapravo napisao:

SqlUpit+="AND Vrsta=" + @Vrsta;

sto nije isto. Rezultat ovog koda nije "AND Vrsta = @Vrsta", posto @Vrsta nije string pod navodnicima u gornjem kodu nego varijabla. Tehnicki, ni ja ni ti nismo bili u pravu, posto @Vrsta cak ne moze ni da bude .NET varijabla (pocinje sa @), tako da njegovo resenje uopste ne bi ni radilo jer se ne bi ni iskompajliralo . Toliko o tome...
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan, sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv… - Z.Đinđić
 
Odgovor na temu

logic_rabbit
Radenko Zec
banjaluka

Član broj: 74458
Poruke: 271
*.lanaco.com.



+1 Profil

icon Re: Problem prilikom detaljne pretrage Baze MSSQL - C#200514.08.2006. u 08:32 - pre 215 meseci
Cuo sam nesto o tome sql injection-u ali sad prvi put da to vidim.
Svaka cast na ovako zanimljivoj temi.
Vecina programera ne bi tako kompresivno razmisljala o tome vecina bi posegnula za jednostavnim resenjem koje sam naveo.
logic_rabbit (MCAD,MCSD,MCT,MCTS-
Windows development,MCPD)
 
Odgovor na temu

logic_rabbit
Radenko Zec
banjaluka

Član broj: 74458
Poruke: 271
*.lanaco.com.



+1 Profil

icon Re: Problem prilikom detaljne pretrage Baze MSSQL - C#200514.08.2006. u 08:40 - pre 215 meseci
string vrsta;//bez @
vrsta=textbox1.text;
SqlUpit+="AND Vrsta=" + vrsta;
Na to sam mislio,malo je u zurbi pisano.

logic_rabbit (MCAD,MCSD,MCT,MCTS-
Windows development,MCPD)
 
Odgovor na temu

[es] :: .NET :: .NET Desktop razvoj :: Problem prilikom detaljne pretrage Baze MSSQL - C#2005

Strane: 1 2

[ Pregleda: 6883 | Odgovora: 30 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.