Jesper F wrote:
> Her er en længere artikel om hvordan de gør
>
http://www.unixwiz.net/techtips/sql-injection.html
Her er en noget mere uddybende stribe eksempler.
> Det handler om at noge bestemte termer og tegn skal renses fra dine
> input-felter før de sendes til databasen.
Hvis man benytter parameterized queries, så er man ude over det problem.
> Derudover skal man Stored Procedures når man kommunikerer med databasen.
Det har ikke den store betydning, hvis disse heller ikke er parameterized.
>
> Jeg frasorterer termer som "delete" "drop" "select" "update" "insert" og
> så f.eks. en funktion som denne
>
> <%
> function dbsafe(data)
> data = replace(data,";","")
> data = replace(data,"'","")
> data = replace(data,"--","")
> data = replace(data,"/*","")
> data = replace(data,"*/","")
> data = replace(data,"*","")
> data = replace(data,"/","")
> data = replace(data,"xp_","")
> end function
> %>
>
> som alle input-felter køres igennem.
> Det skulle hjælpe vil jeg mene.
Ud over det begrænser indholdet, så mangler du forskellige hexnotationer.
Her er lidt klip fra oprettelse af en message:
<code snippets>
.....
Set AdoCommandMessage = Server.CreateObject ("ADODB.Command")
AdoCommandMessage.ActiveConnection = oConn
AdoCommandMessage.CommandType = adCmdText
AdoCommandMessage.Parameters.Append
AdoCommandMessage.CreateParameter("message", adLongVarChar,
adParamInput,-1,"")
.....
MessageBody = Request.form("MessageBody")
.....
sql="INSERT INTO Messages VALUES(" + _
cStr(MessageVersion+MessageVersionDelta)+"," + _
cStr(UserId)+","+ _
MessageType + "," + _
"?,'"+ _
cStr(Now)+"')"
if debug then Response.Write sql + "<br />"
AdoCommandMessage.CommandText = sql
AdoCommandMessage(0) = MessageBody
AdoCommandMessage.Execute
.....
<c/ode snippets>
Humlen er, at SQL og Parametre/input er adskilt, så uanset hvad, og hvilke
karakterer, der står i MessageBody, så påvirker det ikke SQL'et.
--
Med venlig hilsen
Stig Johansen