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

ASP aplikacija i zastita od SQL injectiona

[es] :: Visual Basic 6 :: ASP aplikacija i zastita od SQL injectiona

Strane: 1 2

[ Pregleda: 6887 | Odgovora: 31 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

PavleBgd
Pavle Joksimovic
Beograd

Član broj: 25177
Poruke: 112
213.244.208.*



Profil

icon ASP aplikacija i zastita od SQL injectiona15.08.2005. u 20:54 - pre 227 meseci
Koliko je ovaj kod kojim se proverava form data, query string ili session
promenljiva koristan za zaustavljanje SQL injection napada?
Da li moze da se nadje neki "workaround" za ovaj problem?

Code:

'Proverava da li maliciozan kod u upitu, znakovi ', \, &, #
Function OsnovnaProvera(strText)

    OsnovnaProvera = False
    intLenght = Len(strText)

    For I=1 To intLenght
        strChar = Mid(strText, I, 1)
        
        If(strChar = "'" OR strChar = "\" OR strChar = "&" OR strChar = "#") Then
            Response.Write "Otkriveno je da ste zadali zabranjene karaktere u upitu."
            OsnovnaProvera = False
            Exit Function
        End If

    Next

    'string je ok
    OsnovnaProvera = True

End Function

http://www.bilosta.co.yu/unos.asp?Name=proba

strName = Request.QueryString("Name")

If NOT OsnovnaProvera(strName) then
Response.End
End if


To pitam zbog toga sto pisem svoju ASP aplikaciju ali nisam siguran kako bi sve
korisnik (ajde ako moram da upotrebim i izraz "haker") mogao da zaobidje
ovakvu validaciju?

[Shadowed: dodati [code] tagovi]

[Ovu poruku je menjao Shadowed dana 16.08.2005. u 18:37 GMT+1]
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 898
*.sksyu.net.



+171 Profil

icon Re: ASP aplikacija i zastita od SQL injectiona16.08.2005. u 09:21 - pre 227 meseci
Cemu sve to? Otkud to da postoje zabranjeni karakteri za SQL? (dobro mozda za neki levi DB...)
 
Odgovor na temu

PavleBgd
Pavle Joksimovic
Beograd

Član broj: 25177
Poruke: 112
213.244.208.*



Profil

icon Re: ASP aplikacija i zastita od SQL injectiona16.08.2005. u 09:40 - pre 227 meseci
Svaka DB i web aplikacija moze biti ranjiva na SQL injection napad - pretrazi malo na googleu sta o tome pise.
 
Odgovor na temu

negyxo
Aleksandar Perkuchin

Član broj: 29751
Poruke: 898
*.sksyu.net.



+171 Profil

icon Re: ASP aplikacija i zastita od SQL injectiona16.08.2005. u 12:43 - pre 227 meseci
Ispravka.
Svaka losa DB i WEB aplikacija.
SQL injection je dosta predvidljiv. Ja sam jos davno (dobro ne tako davno) kad sam radio import nekih podataka u access iz clipera, odnosno dBase (dbf), imao taj problem. Program koji sam radio bio je u VB6 pisan i naravno umesto parametara ja koristio obicno spajanje stringova. Pa tako kada je korisnik upisao u search za karaktere @`^[] (koji su naravno u cliperu korisceni kao nasa slova) ja sam samo imao probleme, pa sam naravno pribegao funkcijama za proveru stringa. Nesto slicno sto i ti sad radis. Naravno sve je to nepotrebno. Doduse kao sto rekoh, dosta zavisi i do DB-a. Bitno je samo da radis preko parametara i taj problem nesataje.

 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12850



+4784 Profil

icon Re: ASP aplikacija i zastita od SQL injectiona16.08.2005. u 18:31 - pre 227 meseci
Taj kod se da znacajno optimizovati.
Zameni deo:
Code:

For I=1 To intLenght
        strChar = Mid(strText, I, 1)
        
        If(strChar = "'" OR strChar = "\" OR strChar = "&" OR strChar = "#") Then
            Response.Write "Otkriveno je da ste zadali zabranjene karaktere u upitu."
            OsnovnaProvera = False
            Exit Function
        End If

    Next

sa:
Code:

If(inStr(strText, "'") + inStr(strText, "\") + inStr(strText, "#") = 0 Then
            Response.Write "Otkriveno je da ste zadali zabranjene karaktere u upitu."
            OsnovnaProvera = False
            Exit Function
        End If


E sad, ne znaci da ce te ovo sasvim zastititi. Zamisli da imas nesto kao:
Code:
"SELECT * FROM SomeTable WHERE userID=" & txtUser.Text)


UserID je broj.
I naravno, propustis txtUser.Text kroz tu proveru. Neko uzme i upise 23 OR 0=0.

[Ovu poruku je menjao Shadowed dana 17.08.2005. u 17:37 GMT+1]
 
Odgovor na temu

Albus
bg

Član broj: 60922
Poruke: 43
*.vdial.verat.net.



Profil

icon Re: ASP aplikacija i zastita od SQL injectiona17.08.2005. u 09:39 - pre 227 meseci
Nisam bas shvatio zasto je taj kod 'znacajno optimizovan'
Uz to, da li je sintakticki ispravan?

Uputite me da li postoji tema o tome kako napraviti 'minimalnog usera' na SQL serveru (user koji nista ne moze van svoje baze, a ni u svojoj ne moze da dropuje tabele....)

Mislim da takav user (web) bi ipak imao neka prava na masteru koja bi mogao da (zlo)upotrebi.

Ako vec injectuje neka to cini kontrolisano.
 
Odgovor na temu

PavleBgd
Pavle Joksimovic
Beograd

Član broj: 25177
Poruke: 112
*.eunet.yu.



Profil

icon Re: ASP aplikacija i zastita od SQL injectiona17.08.2005. u 14:41 - pre 227 meseci
Hvala Vam puno na odgovorima, doradio sam malo funkciju i imenovao sam je drugcije. Baza je Access i koliko ja znam mogu da se koriste i queryji iz Accesa direktno iz ASP-a kroz parametre. Jedno pitanje, zar ne bi trebalo da se izvrsi validacija i parametara pre poziva query-ja, ne zbog SQL injectiona koliko zbog toga da bi program javio da je korisnik uneo nesta sto ne bi trebao, greskom ili sa namerom?

Code:
Function DaLiImaNeDozvoljenihKaraktera(strText)
Dim strKarakteri(15) 
'SQL escape sekvenca
strKarakteri(1) = "'"
strKarakteri(2) = "%"
strKarakteri(3) = "--"
strKarakteri(4) = "\"
strKarakteri(5) = "*"
'zastita od upita
strKarakteri(6) = "SELECT"
strKarakteri(7) = "INSERT"
strKarakteri(8) = "DELETE"
strKarakteri(9) = "UPDATE"
strKarakteri(10) = "DROP"
'html
strKarakteri(11) = "&"
strKarakteri(12) = "#"
'unos html koda
strKarakteri(13) = ">"
strKarakteri(14) = "<"

'Svaki string u sebi potencijalno ima ne dozvoljene karaktere
DaLiImaNeDozvoljenihKaraktera = True

    For I=1 To 14
        If (InStr(strText, strKarakteri(7), VBTextCompare) > 0) Then
            Response.Write "Nije dozvoljeno koristiti specijalne karaktere u upitu."
            DaLiImaNeDozvoljenihKaraktera = True
            Exit Function
        End If
    Next
DaLiImaNeDozvoljenihKaraktera = False
End Function

'Provera da li je broj, veci od nule
Function OsnovnaProvera(strText)

OsnovnaProvera = False

If (DaLiImaNeDozvoljenihKaraktera(strText)) then
    OsnovnaProvera = False
    Exit Function
End if


End Function


Nemam resenje za onaj problem koji je spomenuo @Shadowed a to je spornost koriscenja "OR" u podacima koje je korisnik POST-ovao iz html forme...

[Ovu poruku je menjao Shadowed dana 17.08.2005. u 17:39 GMT+1]
 
Odgovor na temu

PavleBgd
Pavle Joksimovic
Beograd

Član broj: 25177
Poruke: 112
*.eunet.yu.



Profil

icon Re: ASP aplikacija i zastita od SQL injectiona17.08.2005. u 16:32 - pre 227 meseci
Evo ga jedan interesantan dokument verujem da ce biti od koristi

http://www.spidynamics.com/papers/SQLInjectionWhitePaper.pdf
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12850



+4784 Profil

icon Re: ASP aplikacija i zastita od SQL injectiona17.08.2005. u 16:35 - pre 227 meseci
Izvinjavam se za onaj kod. Nesto sam zeznuo pa je obrisan deo. Idem da ispravim.

Zamolio bih korisnike da koriste [code] tagove.

[Ovu poruku je menjao Shadowed dana 17.08.2005. u 17:47 GMT+1]
 
Odgovor na temu

PavleBgd
Pavle Joksimovic
Beograd

Član broj: 25177
Poruke: 112
*.eunet.yu.



Profil

icon Re: ASP aplikacija i zastita od SQL injectiona17.08.2005. u 17:22 - pre 227 meseci
Ignorisite funkciju OsnovnaProvera u ovoj zadnjoj verziji koda koji sam poslao, hvala na razumevanju.
 
Odgovor na temu

Albus
bg

Član broj: 60922
Poruke: 43
*.vdial.verat.net.



Profil

icon Re: ASP aplikacija i zastita od SQL injectiona18.08.2005. u 08:26 - pre 227 meseci
Fino napisan kod...

Mozda ne bi bilo lose da se umesto response.write "Nedozvoljeni karakteri" koristi nesto tipa err.raise(404) - nisam siguran za sintaksu.

Evo zasto: razni vulnerabiliti skeneri bi mozda ono prvo videli kao possible sql-injecton vulnerability te bi se haker malo potrudio oko sajta.

Ispravite me ako gresim.

Naravno - koristiti kastomizovanu stranu za 404 da posetilac ne bi pomislio da je pukao sajt ako greskom nesto ukuca. Kad smo kod te strane:
DA LI MOGU KOMPLETAN URL DA POSALJEM SEBI NA MAIL ?
Ako nista drugo da na toj kastom strani prihvatim promenljivu i posaljem sebi na mail zajedno sa vremenom i IP adresom napadaca ?

Ako sam na dobrom putu a nisam neki koder, dajte predloge kastom error strane...
 
Odgovor na temu

PavleBgd
Pavle Joksimovic
Beograd

Član broj: 25177
Poruke: 112
*.eunet.yu.



Profil

icon Re: ASP aplikacija i zastita od SQL injectiona18.08.2005. u 14:02 - pre 227 meseci
To je interesantna ideja, mogao bi da se upise string koji nije prosao validaciju i IP adresa napadaca u neki log fajl, ne vidim zasto bi to bio problem.
Dodao sam jos nekoliko ispravki u kod:

Code:

Function DaLiImaNeDozvoljenihKaraktera(strText)
Dim strKarakteri(16) 
'SQL escape sekvenca
strKarakteri(1) = "'"
strKarakteri(2) = "%"
strKarakteri(3) = "--"
strKarakteri(4) = "\"
strKarakteri(5) = "*"
'zastita od upita
strKarakteri(6) = "SELECT"
strKarakteri(7) = "INSERT"
strKarakteri(8) = "DELETE"
strKarakteri(9) = "UPDATE"
strKarakteri(10) = "DROP"
strKarakteri(11) = "WHERE"
strKarakteri(12) = " OR "
'html
strKarakteri(13) = "&"
strKarakteri(14) = "#"
'unos html koda
strKarakteri(15) = ">"
strKarakteri(16) = "<"

'Svaki string u sebi potencijalno ima ne dozvoljene karaktere
DaLiImaNeDozvoljenihKaraktera = True

    For I=1 To 16
        If (InStr(strText, strKarakteri(I), VBTextCompare) > 0) Then
            Response.Write "Podaci koje ste uneli nisu validni. Nakon ispravke ponovite postupak. Hvala."
            DaLiImaNeDozvoljenihKaraktera = True
            Exit Function
        End If
    Next
DaLiImaNeDozvoljenihKaraktera = False
End Function


Sa ovim kodom bi trebalo porveriti svaku session promenljivu, query ili post data string pre bilo kakve upotrebe u upitima ili parametrima za procedure. Jedino je pitanje gde se napadac moze jos uvuci...
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12850



+4784 Profil

icon Re: ASP aplikacija i zastita od SQL injectiona18.08.2005. u 16:08 - pre 227 meseci
Inace za onaj primer koji sam ti dao, proveri samo da li je podatak brojni.
Uvek je bitno da proveris da li tipovi poadtaka odgovaraju, sto zbog ovakvih propusta sto zbog manje mogucnosti pojave bug-ova.
 
Odgovor na temu

Albus
bg

Član broj: 60922
Poruke: 43
*.vdial.verat.net.



Profil

icon Re: ASP aplikacija i zastita od SQL injectiona19.08.2005. u 08:49 - pre 227 meseci
Naveo si % kao zabranjeni karakter.

Neznam da li onda 'space' moze da radi posto ga browser pretvori u %20 ?
Da li su onda neki karakteri visak - tipa '>' sto odgovara %3E

Ako se dozvoli % sta moze sa tim da uradi ? (Da li moze da progura ' select kao %nesto za svaki karakter?)
 
Odgovor na temu

PavleBgd
Pavle Joksimovic
Beograd

Član broj: 25177
Poruke: 112
*.eunet.yu.



Profil

icon Re: ASP aplikacija i zastita od SQL injectiona19.08.2005. u 15:26 - pre 227 meseci
Neka me neko ispravi ako gresim, ali koliko je meni poznato svaki formatirani string po prijemu na Web server (IIS, Apache...) se vraca u njegov izvorni oblik, npr. "Hello%20ASP%World" postaje "Hello ASP World" i tako se koristi kao promenljiva u ASP-u, PHP-u...

Dodao sam jos nekoliko izmena:

Code:

'********************************************************************
'Osnovna validacija za sve stringove
'********************************************************************
Function DaLiImaNeDozvoljenihKaraktera(strText)
Dim strKarakteri(24) 
'SQL escape sekvenca
strKarakteri(1) = "'"
strKarakteri(2) = "%"
strKarakteri(3) = "--"
strKarakteri(4) = "\"
strKarakteri(5) = "*"
'zastita od upita
strKarakteri(6) = "SELECT"
strKarakteri(7) = "INSERT"
strKarakteri(8) = "DELETE"
strKarakteri(9) = "UPDATE"
strKarakteri(10) = "WHERE"
strKarakteri(11) = "ALTER"
strKarakteri(12) = " OR "
'SQL sistemske procedure i komande
strKarakteri(13) = "xp_"
strKarakteri(14) = "sp_"
strKarakteri(15) = "cmdshell"
strKarakteri(16) = "makewebtask"
'Access sistemski objekti
strKarakteri(17) = "MSysACEs"
strKarakteri(18) = "MSysObjects"
strKarakteri(19) = "MSysQueries"
strKarakteri(20) = "MSysRelationships"
'html
strKarakteri(21) = "&"
strKarakteri(22) = "#"
'unos html koda
strKarakteri(23) = ">"
strKarakteri(24) = "<"

'Pretpostavka je da strText nije IsNull i da nije IsEmpty, konverzija u string
strText = CStr(strText)

'Svaki string u sebi potencijalno ima ne dozvoljene karaktere
DaLiImaNeDozvoljenihKaraktera = True

    For I=1 To 24
        If (InStr(1,strText, strKarakteri(I), VBTextCompare) > 0) Then
        'If (InStr(1,strText, strKarakteri(7)) > 0) Then
        'If (InStr(1,"salaplaja", strKarakteri(I)) > 0) Then
            Response.Write "Podaci koje ste uneli nisu validni. Nakon ispravke ponovite postupak. Hvala."
            DaLiImaNeDozvoljenihKaraktera = True
            Exit Function
        End If
    Next
DaLiImaNeDozvoljenihKaraktera = False
End Function
 
Odgovor na temu

Albus
bg

Član broj: 60922
Poruke: 43
*.vdial.verat.net.



Profil

icon Re: ASP aplikacija i zastita od SQL injectiona29.08.2005. u 08:06 - pre 227 meseci
Koliko sam uspeo da testiram, kod je OK.

Jedino ne znam gde da ga postavim: hocu da ima Application scope (nesto tipa public function) da ne bi morao da ga kopiram na svaku stranu.

Jel ima neko inteligentnije resenje od pravljenja .dll i ucitavanje istog u global.asa fajlu ?
 
Odgovor na temu

PavleBgd
Pavle Joksimovic
Beograd

Član broj: 25177
Poruke: 112
*.eunet.yu.



Profil

icon Re: ASP aplikacija i zastita od SQL injectiona29.08.2005. u 11:33 - pre 227 meseci
Ja ga koristim u posebnom asp fajlu, koga onda ukljucujem preko include komande samo na onim asp stranama koje su rizicne:

Code:
<!-- #include file="security.asp" -->


Pozdrav
 
Odgovor na temu

Albus
bg

Član broj: 60922
Poruke: 43
213.244.197.*



Profil

icon Re: ASP aplikacija i zastita od SQL injectiona29.08.2005. u 14:14 - pre 227 meseci
Ok. Neznam da li je za krpljenje velikog sajta optimalnije resenje praviti .dll ili koristiti include.

Na pocetku svake strane, svaku ulaznu promenjljivu treba provuci kroz funkciju. Gomila if then....

Da li bi moglo da se nekako, kao ulaz provuku svih 10 promenljivih tipa:
DaLiImaNeDozvoljenihKaraktera(promeljiva1, promenljiva2,promenljiva3.....) bez da moram da pravim niz od promenljivih...

U funkciji bi ih spojio u jednu i nju testirao.
Napisao bih ja ali ne znam kako da ovo prevedem iz VB-a u asp:
Code:

Function DaLiImaNeDozvoljenihKaraktera(promenljiva1,optional promenljiva2 as string, optional promenljiva3 as string)
strText=promeljniva1 & promenljiva2 & promenljiva3
' dalje ide tvoja funkcija koja testira strText'


Mozda bi moralo da se rade provere na isMissing....
Ali svakako bi lakse bilo da se radi jedan poziv po strani nego da zovem 10 puta za 10 promenljivih...
Ispravi me ako gresim, i pogledaj za ono optional
 
Odgovor na temu

Albus
bg

Član broj: 60922
Poruke: 43
*.vdial.verat.net.



Profil

icon Re: ASP aplikacija i zastita od SQL injectiona06.10.2005. u 14:54 - pre 225 meseci
Ipak je .dll bolji nego svaki put kad neko dodje na stranu da mu includu-je fajl zato sto ga samo jedamput ucitava u memoriju (kad startuje IIS)
Negde sam procitao (ALI NEZNAM GDE) detaljnije uputstvo o tome sta uraditi u global.asa, kako napraviti taj .dll (sta je u njemu xxxxx a sta yyyy)...
Code:

<OBJECT RUNAT=Server SCOPE=Application ID=xxxxx
    ProgID="yyyy">
</OBJECT>

Ako neko zna napamet neka napise.
 
Odgovor na temu

PavleBgd
Pavle Joksimovic
Beograd

Član broj: 25177
Poruke: 112
*.alv.mediaworksit.net.



Profil

icon Re: ASP aplikacija i zastita od SQL injectiona06.10.2005. u 15:41 - pre 225 meseci
Definitivno je bolje resenje (brze i zasticenjije) da kod za proveru kao jos mnogo drugih stvari bude u izvrsnom obliku, kao funkcija ili grupa funkcija, klasa u DLL-u (ISAPI?). Jedino sto ne znam je kako instalirati i korisiti takav DLL kada imate sajt (kao ja) kod hosting provajdera. Trebalo bi pokrenuti registraciju komponenti (RegSvr32.exe) a to ne mogu ja vec provajder? Mozda gresim ali ako neko ima vise infoa bilo bi od pomoci...
 
Odgovor na temu

[es] :: Visual Basic 6 :: ASP aplikacija i zastita od SQL injectiona

Strane: 1 2

[ Pregleda: 6887 | Odgovora: 31 ] > FB > Twit

Postavi temu Odgovori

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