Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

  • 31 odgovor
  • 9.603 pregleda

Najnovija ↓

ASP aplikacija i zastita od SQL injectiona 15.08.2005. u 21:54 · pre 258 meseci
izmenjeno 1 put, poslednji put Shadowed 16.08.2005. u 18:37
  1. Shadowed16.08.2005. u 18:37zapis iz teksta poruke
#1
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]
Re: ASP aplikacija i zastita od SQL injectiona 16.08.2005. u 13:43 · pre 258 meseci #4
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.

Re: ASP aplikacija i zastita od SQL injectiona 16.08.2005. u 19:31 · pre 258 meseci
izmenjeno 1 put, poslednji put Shadowed 17.08.2005. u 17:37
  1. Shadowed17.08.2005. u 17:37zapis iz teksta poruke
#5
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.
Potpis
Nebojsa Milanovic:
-Trumpa smatram vrhunskim predsednikom i voleo bih da živim u državi na čijem je on čelu
-Rusija ne laže, ne vodi osvajačke ratove
-Trump je svetla tačka u USA blatu
-Elon Musk, možda najpametniji i najtrezveniji Amerikanac
Re: ASP aplikacija i zastita od SQL injectiona 17.08.2005. u 10:39 · pre 258 meseci #6
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.
Re: ASP aplikacija i zastita od SQL injectiona 17.08.2005. u 15:41 · pre 258 meseci
izmenjeno 1 put, poslednji put Shadowed 17.08.2005. u 17:39
  1. Shadowed17.08.2005. u 17:39zapis iz teksta poruke
#7
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...
Re: ASP aplikacija i zastita od SQL injectiona 17.08.2005. u 17:35 · pre 258 meseci
izmenjeno 1 put, poslednji put Shadowed 17.08.2005. u 17:47
  1. Shadowed17.08.2005. u 17:47zapis iz teksta poruke
#9
Izvinjavam se za onaj kod. Nesto sam zeznuo pa je obrisan deo. Idem da ispravim.

Zamolio bih korisnike da koriste [code] tagove.
Potpis
Nebojsa Milanovic:
-Trumpa smatram vrhunskim predsednikom i voleo bih da živim u državi na čijem je on čelu
-Rusija ne laže, ne vodi osvajačke ratove
-Trump je svetla tačka u USA blatu
-Elon Musk, možda najpametniji i najtrezveniji Amerikanac
Re: ASP aplikacija i zastita od SQL injectiona 18.08.2005. u 09:26 · pre 258 meseci #11
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...
Re: ASP aplikacija i zastita od SQL injectiona 18.08.2005. u 15:02 · pre 258 meseci #12
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...
Re: ASP aplikacija i zastita od SQL injectiona 18.08.2005. u 17:08 · pre 258 meseci #13
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.
Potpis
Nebojsa Milanovic:
-Trumpa smatram vrhunskim predsednikom i voleo bih da živim u državi na čijem je on čelu
-Rusija ne laže, ne vodi osvajačke ratove
-Trump je svetla tačka u USA blatu
-Elon Musk, možda najpametniji i najtrezveniji Amerikanac
Re: ASP aplikacija i zastita od SQL injectiona 19.08.2005. u 09:49 · pre 258 meseci #14
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?)
Re: ASP aplikacija i zastita od SQL injectiona 19.08.2005. u 16:26 · pre 258 meseci #15
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
Re: ASP aplikacija i zastita od SQL injectiona 29.08.2005. u 09:06 · pre 257 meseci #16
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 ?
Re: ASP aplikacija i zastita od SQL injectiona 29.08.2005. u 12:33 · pre 257 meseci #17
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
Re: ASP aplikacija i zastita od SQL injectiona 29.08.2005. u 15:14 · pre 257 meseci #18
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
Re: ASP aplikacija i zastita od SQL injectiona 06.10.2005. u 15:54 · pre 256 meseci #19
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.
Re: ASP aplikacija i zastita od SQL injectiona 06.10.2005. u 16:41 · pre 256 meseci #20
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...
Odgovori
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme