Du kan også sikre dig yderligere ved at generelt validere dataene inden de lægges i databasen - og aldrig bruge request("formfelt") direkte i SQL (eller hvordan du nu får parametre i det programmeringssprog du bruger.
Hvis de data der skal indsættes er et tal, så kontroller om de data der kommer er et tal. Hvis der skal komme en dato, så kontroller at det er. Etc.
Men faktisk er det mere et spørgsmål, som burde stilles under det programmeringssprog du anvender - da valideringen bør ske inden der sendes noget til databasen.
Bruger du ASP, så er her et par funktioner, som du kan bruge:
function safeget( field ) ' Henter data udfra request-navn safeget = replace(request(field), "'", "´") end function
function safegetRAW( field ) safegetRAW = replace(field, "'", "´") end function
FUNCTION GetNumber_Default(ByVal req_name, ByVal default) ' Henter data og giver en default værdi hvis der ikke kommer et tal If IsNumeric(request(req_name)) And Len(request(req_name)) > 0 Then tmp = CLng(request(req_name)) Else tmp = default End If GetNumber_Default = tmp END FUNCTION ' GetNumber_Default
FUNCTION Rens(byval tekst) ' Fjerner <> så man ikke kan indsætte fungerende javascript Rens = trim(replace(replace(replace("" & tekst, "'", "´"), "<", "<"), ">", ">")) END FUNCTION ' Rens
<% adParamInput = 1 adVarChar = 200 Set con = Server.CreateObject("ADODB.Connection") con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Databases\MSAccess\Test.mdb;;" Set cmd = Server.CreateObject("ADODB.Command") cmd.ActiveConnection = con cmd.CommandText = "SELECT COUNT(*) AS n FROM myusers WHERE un = @un AND pw = @pw" cmd.Parameters.Append(cmd.CreateParameter("@un", adVarChar, adParamInput, 32)) cmd.Parameters.Append(cmd.CreateParameter("@pw", adVarChar, adParamInput, 32)) cmd.Parameters("@un") = "arne" cmd.Parameters("@pw") = "duerikke" Set rs = cmd.Execute Response.Write rs("n") Set rs = Nothing Set cmd = Nothing Set con = Nothing %>
<% ' open adParamInput = 1 adInteger = 3 adDate = 7 Set con = Server.CreateObject("ADODB.Connection") con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Databases\MSAccess\Test.mdb;;" Set cmd = Server.CreateObject("ADODB.Command") cmd.ActiveConnection = con ' lige ud af landevejen con.Execute "INSERT INTO params(id,tid) VALUES(1,'7-JUN-2005')" ' med kommando cmd.CommandText = "INSERT INTO params(id,tid) VALUES(2,'8-JUN-2005')" cmd.Execute ' med kommando og parametre cmd.CommandText = "INSERT INTO params(id,tid) VALUES(@id,@tid)" cmd.Parameters.Append(cmd.CreateParameter("@id", adInteger, adParamInput)) cmd.Parameters.Append(cmd.CreateParameter("@tid", adDate, adParamInput)) cmd.Parameters("@id") = 3 cmd.Parameters("@tid") = CDate("9-JUN-2005") cmd.Execute ' close Set cmd = Nothing Set con = Nothing %> OK
mrbart >> Det er altså ikke så svært, du har fået alt kode og eksempel på hvordan det skal bruges. Men er du total kode-analfabeter vil jeg anbefale at du oprette et ? i ASP kategorien med alt din kode fra en side (f.eks din login side), hvor du spørger om hvordan den gøres sikker.
Desuden: §2.1.13: Det er ikke tilladt at tildele point for en opgave løst uden om Eksperten.dk (f.eks. opgaver løst via mail, ICQ eller telefon), eller blot et andet spørgsmål på Eksperten.dk (lovlig pointoverførsel undtaget).
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.