Citat:
Originally posted by rille77@Oct 13 2004, 23:19
Fråga bara, varför bär man inte testa för SQL injections före SQL frågan???
|
(Ursäkta mitt lite sena svar.)
Jo, för att kunna hantera alla variabler under samma förutsättningar. Säg att du vill skriva ut det felaktiga användarnamnet eller fylla i ett formulär åt användaren, så att användaren kan rätta till sitt fel utan att behöva skriva om allt. Då måste du komma ihåg om du har bytt ut alla ' mot '' för att sen göra det motsatta när du ska skriva ut variablen.
Så en bra regel är att hantera alla variabler som "fientliga", oavsett om du hämtar data från en databas, cookies, Request objektet osv. När du bygger en SQL-fråga testar du mot SQL-injection och när du skriver ut en variabel använder du Server.HTMLEncode().
Exempel:
Kod:
strUser = Trim(Request.Form("user"))
intUserId = Request.Form("userid")
' Bygga en SQL-fråga (sträng)
strSql = "SELECT * FROM users WHERE username = '" & Replace(strUser, "'", "''") & "'"
' Bygga en SQL-fråga (tal)
strSql = "SELECT * FROM users WHERE userid = " & Int(intUserId)
' Skriva ut en variabel
Response.Write(Server.HTMLEncode(strUser))
Response.Write(Server.HTMLEncode(intUserId))