Jeg har lavet en login side til min hjemmeside, hvor jeg har fundet ud af at der er et sikkerhedshul i. Problemet er at når man skriver 'or '1'='1 i brugernavn og password feltet så bliver man logget ind på admin siden. Hvad skal jeg gøre. Jeg sidder i programmet ultraDev 4 og her er noget af koden som jeg går udfra at der skal rettes i.
Håber i kan hjælpe
Her er koden: <% ' *** Validate request to log in to this site. MM_LoginAction = Request.ServerVariables("URL") If Request.QueryString<>"" Then MM_LoginAction = MM_LoginAction + "?" + Request.QueryString MM_valUsername=CStr(Request.Form("Brugernavn")) If MM_valUsername <> "" Then MM_fldUserAuthorization="" MM_redirectLoginSuccess="loggedin.asp" MM_redirectLoginFailed="nologin.asp" MM_flag="ADODB.Recordset" set MM_rsUser = Server.CreateObject(MM_flag) MM_rsUser.ActiveConnection = MM_ConAnielsen_STRING MM_rsUser.Source = "SELECT brugernavn, password" If MM_fldUserAuthorization <> "" Then MM_rsUser.Source = MM_rsUser.Source & "," & MM_fldUserAuthorization MM_rsUser.Source = MM_rsUser.Source & " FROM login WHERE brugernavn='" & MM_valUsername &"' AND password='" & CStr(Request.Form("Password")) & "'" MM_rsUser.CursorType = 0 MM_rsUser.CursorLocation = 2 MM_rsUser.LockType = 3 MM_rsUser.Open If Not MM_rsUser.EOF Or Not MM_rsUser.BOF Then ' username and password match - this is a valid user Session("MM_Username") = MM_valUsername If (MM_fldUserAuthorization <> "") Then Session("MM_UserAuthorization") = CStr(MM_rsUser.Fields.Item(MM_fldUserAuthorization).Value) Else Session("MM_UserAuthorization") = "" End If if CStr(Request.QueryString("accessdenied")) <> "" And false Then MM_redirectLoginSuccess = Request.QueryString("accessdenied") End If MM_rsUser.Close Response.Redirect(MM_redirectLoginSuccess) End If MM_rsUser.Close Response.Redirect(MM_redirectLoginFailed) End If %>
Hvor skal jeg rette i koden for at hullet er lukket?
anielsen> Det beskrevne sikkerhedshul eksisterer kun hvis der også er et felt i databasen der hedder 1. Hele tricket ligger i plingerne ' det er dem der adskiller, men det ved du jo, så plinger skal erstattes.
Hvis nu der er en der har valgt at have plinger og anførselstegn i sit password, eller hvis man vil kryptere data (hvilket klart kan anbefales) så skal plinger oversættes til deres respektive selv, bare i et andet sprog, i stedet for at fjernes eller laves om til et andet lovligt tegn. replace(request.form("Password"), "'", "'") skal bruges både når en bruger oprettes og når denne logger ind.
Her er koden jeg har sat det nye ind i: <% Function FixSQL(strSource) strSource = Replace(strSource,"'","'") FixSQL= strSource End Function ' *** Validate request to log in to this site. MM_LoginAction = Request.ServerVariables("URL") If Request.QueryString<>"" Then MM_LoginAction = MM_LoginAction + "?" + Request.QueryString MM_valUsername=CStr(Request.Form("Brugernavn")) If MM_valUsername <> "" Then MM_fldUserAuthorization="" MM_redirectLoginSuccess="loggedin.asp" MM_redirectLoginFailed="nologin.asp" MM_flag="ADODB.Recordset" set MM_rsUser = Server.CreateObject(MM_flag) MM_rsUser.ActiveConnection = MM_ConAnielsen_STRING MM_rsUser.Source = "SELECT brugernavn, password" If MM_fldUserAuthorization <> "" Then MM_rsUser.Source = MM_rsUser.Source & "," & MM_fldUserAuthorization MM_rsUser.Source = MM_rsUser.Source & " FROM login WHERE brugernavn='" & FixSQL(MM_valUsername) &"' AND password='" & FixSQL(CStr(Request.Form("Password"))) & "'" MM_rsUser.CursorType = 0 MM_rsUser.CursorLocation = 2 MM_rsUser.LockType = 3 MM_rsUser.Open If Not MM_rsUser.EOF Or Not MM_rsUser.BOF Then ' username and password match - this is a valid user Session("MM_Username") = MM_valUsername If (MM_fldUserAuthorization <> "") Then Session("MM_UserAuthorization") = CStr(MM_rsUser.Fields.Item(MM_fldUserAuthorization).Value) Else Session("MM_UserAuthorization") = "" End If if CStr(Request.QueryString("accessdenied")) <> "" And false Then MM_redirectLoginSuccess = Request.QueryString("accessdenied") End If MM_rsUser.Close Response.Redirect(MM_redirectLoginSuccess) End If MM_rsUser.Close Response.Redirect(MM_redirectLoginFailed) End If %>
Jeg synes nu også at du skal give til ezolu, da det var ham der hjalp med det oprindelige problem :-)
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.