Avatar billede cronck Nybegynder
25. januar 2005 - 20:16 Der er 6 kommentarer og
1 løsning

Login: Sikkerhed

Hej eksperter!

Nu er det ved at være noget tid siden at jeg sidst har leget med ASP, og jeg har derfor glemt løsningen til dette sikkerheds hul i logins...

Hvordan er det nu lige at man kan forhindre at folk kan logge ind med ' or '2 ??
Avatar billede driis Nybegynder
25. januar 2005 - 20:23 #1
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 )
Avatar billede cronck Nybegynder
25. januar 2005 - 20:24 #2
Ved sq ikk helt.... Jeg bruger bare IIS serveren i windows?
Avatar billede driis Nybegynder
25. januar 2005 - 20:25 #3
Men hvad er din database ?
Avatar billede cronck Nybegynder
25. januar 2005 - 20:25 #4
en ganske alm. acces db...
Avatar billede driis Nybegynder
25. januar 2005 - 20:28 #5
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.
Avatar billede cronck Nybegynder
25. januar 2005 - 20:29 #6
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"),"'","''")) & "'"

Smid du bare et svar, så får du point alligevel
Avatar billede driis Nybegynder
25. januar 2005 - 20:35 #7
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.
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester