webForumDet fria alternativet

Hjälp med funktion mot sqlinjekt

ASP

3 svar · 365 visningar · startad av Nova

Medlem sedan feb. 2005216 inlägg
Frågan#1

Hittade denna här på forumet av Erik Juhlin

Function CheckInputData(ByVal sInputData)
	Dim objRegExp
	Set objRegExp = New RegExp
	objRegExp.Pattern = "[^\s\d,]"
	CheckInputData = Not objRegExp.Test(sInputData)
	Set objRegExp = Nothing
End Function

If Not CheckInputData(participantId) Then
	Response.Write "Incorrect input data."
	Response.End
End If

Denna kod

 where id = " & CheckInputData(request.QueryString("id")) & " AND anv_nr = " & session("anv_nr") & ""

Ger

DELETE from hund_dagkoppling where id = True AND anv_nr = 90

Men id bör ju vara en siffra och inte true, för då tar det alla, varför blir det tokigt?

//Kockar som jag ska koka soppa inte hålla på med hemsidor!

Medlem sedan juni 200032 967 inlägg
#2

Funktionen kontrollerar bara om värdet är giltigt, och gör inga ändringar på något värde. Exempel:

lID = request.QueryString("id")
If CheckInputData(lID)  then
      ' ok, då kör vi...
      ".....where id = " & lID & " AND anv_nr = " & session("anv_nr") & ""
End if

...Om jag tolkar funktionen rätt vill säga.

mvh

Medlem sedan feb. 2005216 inlägg
#3

Tackar @nders
Tur att detta forum finns:)

Medlem sedan maj 200010 687 inlägg
#4

Dock är just den funktionen endast tänkt att validera kommaseparerade strängar som man använder i SQL.
För vanliga numeriska tal så är det smidigare att bara köra med CLng.

lID = CLng(request.QueryString("id"))
where id = " & lID & " AND anv_nr = " & CLng(session("anv_nr"))

Det funkar i.o.f.s. att skriva så som @nders skrev eftersom att mellanslag och kommatecken inte kan göra någon skada. Men som sagt är den gjort för kommaseparerade strängar. De kan man inte typkonvertera, då får man göra nåt liknande som funktionen jag gjort.

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