Det er SQL injections du tænker på. Du kan bl.a.: - Bruge RegEx til at kontrollere at strengen ikke indeholder ' eller -- før du genererer din SQL. (Eller Replace) - Bruge en stored procedure ( ihvertfald på MSSQL eller nyeste MySQL )
OK, der findes så ikke stored procedures. Hvordan laver du din kontrol ?
Men under alle omstændigheder skal du blot validere dit input server-side. Det må ikke indeholde ' eller -- idet det under de rigtige omstændigheder kan skabe en SQL injection med uønsket sideeffekt. Du kan også (som ekstra sikkerhed) hente Password ud fra din DB ved hjælp af UserName og lave sammenligningen i ASP.
Typisk... Jeg havde lissom glemt at sætte min replace ind, som jeg egentlig havde lavet... :-) strSQL = "Select * from Admins where Username = '" & Trim(Replace(Request.Form("user"),"'","''")) & "' AND Password = '" & Trim(Replace(Request.Form("pass"),"'","''")) & "'"
OK. Jeg kan lige forklare, problemet er følgende: Hvis du har de 2 variabler UserName og Password og bruger dem til at lave en SQL sætning lignende: Dim strSQL,rs strSQL = "SELECT COUNT(*) FROM tblUsers WHERE UserName='" & UserName & "' AND Password='" & Password & "'" Set rs = Conn.Execute(strSQL) If Not rs.EOF Then ' giv adgang Else ' giv ikke adgang End If ....
Hvis Brugeren så indtaster følgende i password feltet: ' or 1=1 -- Så udføres følgende SQL: SELECT COUNT(*) FROM tblUsers Where UserName='Poul' AND Password='' or 1=1 --' Hvilket returnerer det totale antal kolonner i tabellen, idet 1=1 altid er sandt og -- angiver en kommentar i SQL.
Synes godt om
Ny brugerNybegynder
Din løsning...
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.