Avatar billede carstenandersen Nybegynder
03. oktober 2011 - 16:56 Der er 12 kommentarer og
1 løsning

SQL injection

Hej eksperter

Vi har et mindre cms system, hvor alle vores kunder bruger samme database. De har deres eget domæne, og hver af deres sider får et Id. En kunde har f.eks. siden www.kundensdomæne.dk/side.asp?Id=27551324. Jeg er blevet gjort opmærksom på, at dette giver et sql hul! Hvad består hullet i? Hvad kan jeg gøre for at lukke det? Hvor kan jeg læse meget mere om dette?

Virkelig på forhånd tak !
Avatar billede hansepeter2 Nybegynder
03. oktober 2011 - 17:02 #1
I dette tilfælde skal du sikre dig, at id udelukkende består af tegnene [0-9], inden du bruger det i din database.

select * from tabel where id=x

Hvis du tillader alle værdier af x, så kan brugeren jo selv digte videre på din sqlsætning.


Læsestof: google + sql injection
Avatar billede hansepeter2 Nybegynder
03. oktober 2011 - 17:08 #2
Alle steder, hvor du byggger en sqlsætning med input udefra, skal du kontrollere/uskadeliggøre data inden du gør brug af det.
Avatar billede carstenandersen Nybegynder
03. oktober 2011 - 17:09 #3
hansepeter2, tak for dit svar :-)

Kunne godt tænke mig, at nogle kom med et noget mere detalteret svar - har nemlig søgt i google, men svært at overskue de forskellige forslag ;-)
Avatar billede arne_v Ekspert
03. oktober 2011 - 17:09 #4
Generelt: brug parameters !
Avatar billede arne_v Ekspert
03. oktober 2011 - 17:10 #5
Avatar billede carstenandersen Nybegynder
03. oktober 2011 - 17:22 #6
arne_v, tak for svar :-) Har lige læst guiden, som virker noget svær ud fra min kunnen ;-) Har selv undersøgt nærmere - kan det løses ved blot at sikre mod pling, altså på en aller anden måde replace Id, ala "Replace(Request.Form("txtusername"),"'","''")"?
Avatar billede softspot Forsker
03. oktober 2011 - 17:55 #7
Jeg hjælper dig gerne videre, hvis min guide ikke er klar nok (det kunne jo være den skulle opdateres :-))...
Avatar billede carstenandersen Nybegynder
04. oktober 2011 - 08:40 #8
Jeg er kommet videre og er blevet anbefalet løsningen på http://blogs.iis.net/nazim/archive/2008/04/28/filtering-sql-injection-from-classic-asp.aspx.

Jeg har endvidere tilføjet ' til kildekoden, og umiddelbart virket det rigtig godt. Hvis jeg f.eks. prøver at tilføje ' i en url, kommer der ikke:

[MySQL][ODBC 5.1 Driver][mysqld-5.1.41-3ubuntu12.10]You have an .....

men i stedet en fejlmeddelelse.

Hvad er jeres vurdering af denne metode? Er der noget, som den ikke tager højde for? Mit problem er, at jeg har rigtig mange sider, som er i "farezonen", så det vil være kanon blot at kunne includere en fil - i hvert fald som "brandslukning" i første omgang ;-)
Avatar billede softspot Forsker
04. oktober 2011 - 09:39 #9
Umiddelbart ville jeg foretrække at benytte parameteriseringen, da du så undgår alle andre problemer. Hvis du vælger at lave white- eller blacklisting risikerer du at du stadig efterlader et hul (selvom det sandsynligvis vil være mindre end før), fordi du ikke har gennemskuet alle de måder man kan snyde systemet på...

Nu er det i sagens natur svært at forholde sig til opgavens omfang, så det er naturligvis en afvejning ifht. cost/benefit, men jeg vil tro kunderne foretrækker den sikre løsning frem for en mindre usikker løsning ;-)

En anden ting er naturligvis hvor godt den driver du benytter understøtter Command-objektet, men det kan du jo teste dig ud af. Jeg har ikke selv erfaring med at køre med Command-objekter op mod en MySQL, så der kan jeg desværre hjælpe med råd og vejledning...
Avatar billede carstenandersen Nybegynder
04. oktober 2011 - 12:42 #10
Tusind tak for jeres svar, som jeg klart kan bruge i problemløsningen. Smid alle et svar og pointene fordeles ;-)
Avatar billede softspot Forsker
04. oktober 2011 - 12:46 #11
Velbekomme.
Avatar billede softspot Forsker
04. oktober 2011 - 12:46 #12
Ups! Nu med svar ;-)
Avatar billede carstenandersen Nybegynder
06. oktober 2011 - 06:53 #13
hansepeter2 og arne_v, vil I ikke have del i pointene? Smid et svar ;-)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester