webForumDet fria alternativet

Eventuellt säkerhetshål som jag inte tänkt på?

ASP

9 svar · 582 visningar · startad av medialabs

Medlem sedan mars 20023 686 inlägg
Frågan#1

Hur ska jag gå tillväga för att förhindra att man ska kunna skriva in "elaka" tecken i mina adresser som går till en specifik nyhet...

http://www.medialabs.se/public/nyhet.asp?id=37

Nu kan man ju skriva in tecken som &, ' och lite annat efter siffror och på det sättet "förstöra" sidan. Hur ska jag gå tillväga för att koda bort detta säkerhetshål?

Medlem sedan juni 200032 967 inlägg
#2

Sök på sql injection. Du är inte först med undringen så att säga...

Medlem sedan mars 20023 686 inlägg
#3

Sql-injektion är jag väl medveten om och är flitig användare av sql-injektionsskydd. Men jag filtrera ju bara bort tecken '

jag behöver hjälp med att bara tillåta siffror..
Det jag vill göra nu är att spärra att man bara kan skriva siffror. efter nyhet.asp?id=

Medlem sedan juni 200032 967 inlägg
#4

Gör en kontroll med IsNumeric, och typkonvertera till Long.

Medlem sedan feb. 20034 441 inlägg
#5

Tjena
Drar upp en gammal tråd nu, men tycker att det är onödigt att skapa en ny tråd för mitt problem.
Jag kollar en sträng med isNumeric, men satsen returnerar true även fast strängen innehåller bokstäver.

I mitt formulär som jag har hämtas ett värde från en databas och läggs som värde i ett textfält.
Värdet jag pratar om är "575 kr".
När jag sedan postar formuläret, körs följande:

bet_sum = FixSQL(Request.Form("bet_sum"))
If isNumeric(bet_sum) Then Response.Write("Yeah") Else Response.Write("Noo") End If : Response.End

I MSDN's referens står det att isNumeric ska ge false om strängen innehåller bokstäver. Så är det alltså inte i mitt fall.

Har även kollat min postdata med VarType() och där får jag 8 som svar, alltså textsträng.

Är det då inte himla konstigt att isNumeric ger true hela tiden?
Vad ska jag göra?

Tack på förhand!

Medlem sedan feb. 20041 816 inlägg
#6

Dokumentationen skrev:

isNumeric() - Returns a Boolean value indicating whether an expression can be evaluated as a number.

Vill du enbart tillåta siffror får du ta till regexp, t.ex:

function isDigits(str)
	Dim regExp
	Set regExp = new RegExp
	regExp.pattern = "^\d+$"
	isDigits = regExp.test(str)
end function

Koden ovan är inte testad men bör fungera.

Medlem sedan feb. 20034 441 inlägg
#7

Men då säger väl dokumentationen fel..?
Strängen "575 kr" kan väl inte på något sätt vara "evaluated as a number" ??

Medlem sedan feb. 20041 816 inlägg
#8

VBS anpassar sig efter systemets inställningar. Byter jag till engelska returnerar skriptet false medan det envisas med att returnera true när jag kör på svenska, så jag antar att det tolkar "754 kr" som just kronor? Jag vet inte, det var rätt länge sedan jag pysslade med VBS.

/r Fast å andra sidan verkar det rätt konstigt. "kr 754" returnerar också true. :q

Medlem sedan feb. 20034 441 inlägg
#9

Jo, skitkonstigt.
Skulle vara intressant att få reda på vad det här beror på, man tycker ju att en sådan funktion ska vara tillförlitlig.
Nu undrar man ju pass bra det här eg. fungerar, om man ser till trådskaparens problem, att kolla om ?id verkligen är ett nummer.

Det är ju isf. inte alls en bra lösning på problemet.

Tack!

Medlem sedan feb. 20041 816 inlägg
#10

MickeA.com skrev:

Nu undrar man ju pass bra det här eg. fungerar, om man ser till trådskaparens problem, att kolla om ?id verkligen är ett nummer.

Inte bra alls isf eftersom exempelvis skulle släppas "12e3" igenom. Bokstaven 'e' är ingen siffra men 12e3 är ett giltigt tal. Vill man släppa igenom siffror och endast siffror, då är ett regExp lösningen. isNumeric() kan vara användbart i många fall men inte här.

262 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
126 ms — ändringar (db)