Vinnaren i pepparkakshustävlingen!
2008-12-21, 23:47
  #1
Medlem
PayDUDEs avatar
Skulle behöva hjälp med att täppa igen sql injections i följande script.


__________________
Senast redigerad av PayDUDE 2008-12-22 kl. 00:00.
Citera
2008-12-21, 23:53
  #2
Medlem
Denna artikel är jättebra. Läs den så kan du nog säkra din kod själv. Du lär dig inget genom att låta andra göra det åt dig.

Men att köra med Parametrar är ändå det bästa sättet.
Citera
2008-12-22, 01:03
  #3
Medlem
webDings avatar
Som jag ser det (men jag skriver nästan aldrig ASP så jag kan ha missat något) så har du bara siffror i de mottagna värdena.

Om du kontrollerar att inga bokstäver finns med, vilket borde vara enklast med hjälp av RegEx (M$ stödjer väl RegEx, eller har dom hittat på något eget?), så kan ingen SQL kod komma med.

Det är sällan man har så enkla parametrar att hantera...
Citera
2008-12-22, 12:36
  #4
Medlem
Länken till artikeln jag snackade om kom tydligen inte med så jag skickar den igen.

http://aspkoll.se/ArticlesRead.asp?id=92
Citera
2008-12-23, 14:42
  #5
Medlem
krimms avatar
Citat:
Ursprungligen postat av webDing
Som jag ser det (men jag skriver nästan aldrig ASP så jag kan ha missat något) så har du bara siffror i de mottagna värdena.

Om du kontrollerar att inga bokstäver finns med, vilket borde vara enklast med hjälp av RegEx (M$ stödjer väl RegEx, eller har dom hittat på något eget?), så kan ingen SQL kod komma med.

Det är sällan man har så enkla parametrar att hantera...
Jag tror ASP har precis som .net funktioner som IsInt() och IsDate() som förenklar sånt här väldigt mycket. Jag skulle föreslå att TS kollar in det.
Citera
2009-01-14, 16:30
  #6
Medlem
Citat:
Ursprungligen postat av webDing
Som jag ser det (men jag skriver nästan aldrig ASP så jag kan ha missat något) så har du bara siffror i de mottagna värdena.

Om du kontrollerar att inga bokstäver finns med, vilket borde vara enklast med hjälp av RegEx (M$ stödjer väl RegEx, eller har dom hittat på något eget?), så kan ingen SQL kod komma med.

Det är sällan man har så enkla parametrar att hantera...

Mja, det är väl betydligt enklare att bara köra "If isNumeric..." på formvärdena istället för att scripta en hel RegExp-funktion, väl?

Med isNumeric utesluter du ju dessutom alla tecken som skulle kunna användas för att göra en injection.

Ex:
Function stopInjection(formFld)
If isNumeric(formFld) Then
' Grönt!
stopInjection = formFld
Else
' Red alert!
' Avbryt allt, skicka felmeddelande etc...
End If
End Function

tid = Date 'Startdatum
tid = DateAdd("d",30,tid)

IF NOT Request.ServerVariables("REMOTE_ADDR") = "217.75.102.141" then
response.end
end if
nr = stopInjection(request("nr"))
sms = stopInjection(request("sms"))
user = stopInjection(right(sms, len(sms)-14))
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & server.mappath ("databasen")

SQL="UPDATE Tabell Set vip='1', datum='"& tid &"' WHERE anv='"& user &"'"
Connect.Execute(SQL)

tariff = request("tariff")
operator = request("operator")

response.write "Vi har nu tagit emot ditt SMS!<br>Du är nu promedlem i 30dagar"
Citera
2009-01-17, 01:06
  #7
Medlem
SSHs avatar
ADODB har också stöd för parametriserade uttryck. För just det här exemplet är det kanske enklast att bara titta på typerna. Men följande är också bra att kunna.

Kod:
Set cmd Server.CreateObject("ADODB.Command")
With cmd
  
.ActiveConnection "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" server.mappath ("databasen")
  .
CommandType adCmdText
  
.CommandText "UPDATE Tabell Set vip='1', datum=? WHERE anv=?"
  
.Parameters.Append cmd.CreateParameter("datum"adIntegeradParamInput0tid)
  .
Parameters.Append cmd.CreateParameter("anv"adIntegeradParamInput0user)
End With

cmd
.Execute 
Citera
2009-01-17, 14:02
  #8
Moderator
Protons avatar
Fan vad det där såg ut...

I vilket fall som helst, funkar det är det ju alldeles förträffligt även om det inte var så snyggt om du frågar mej
Citera

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback