Sql = "Select Count(*) as Found from user where (username = '" & strUsername & "') and (password ='" & strPassword & "')" Set LO = RS.Execute(Sql) if LO("Found") = 0 then Session("login") = "" error = "Du blev ikke godkendt af systemet" else strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../../DB/database.mdb") Set myConn = Server.CreateObject("ADODB.Connection") myConn.Open strDSN strSQL = "SELECT * FROM user where (username = '" & Request("username") & "') and (password ='" & Request("password") & "')" Set ez = myConn.Execute(strSQL) Session("login") = "yes mate" Session("UserID") = ez("ID") Session("Password") = ez("password") session("UserName") = ez("username") Response.Redirect "result.asp" EZ.Close RS.Close Conn.Close end if end if %>
På de sider der skal beskyttes:
<% if session("login") = "" Then Response.redirect("login.asp") end if %>
1. Er det et sikkert logon script, eller er det nemt at omgå?. Hvis der f.eks. er en der bruger det samme script og kender adressen på mine sider, kan han så "hoppe" over på disse og derved snyde det, ved at logge ind på sin egen side først??? 2. Kan man tilføje en checkbox "husk mit login" til scriptet 3. Kan man lave en log af funktion, så man ikke hænger i browserens hukommelse i 20 min.
is du vil huske en brugers logen skal du til at sætte en cookie. når du logger ind.
if Request.Form("DinCheckBox") <> "" then Response.Cookies("EtNavnTilCookien")("navn") = Request.form("Username") Response.Cookies("EtNavnTilCookien")("pass") = Request.form("PassWord") Response.Cookies("EtNavnTilCookien").Expires = Date+365 end if
Kan så hentes ud på igen med: LoginName = Request.Cookies("EtNavnTilCookien")("navn") LoginPass = Request.Cookies("EtNavnTilCookien")("pass")
generelt er det en god idé IKKE at kalde sine loginfelter (både loginformen og databasen) for username og password, eller UN og PW, da de er nogle af de første der tjekkes på i bruteforce programmer.
Det er ikke helt rigtige at Session.Abandon() nedlægger sessions så snart den bliver brugt. Den virker først når man skifter side. F.eks kan man godt gøre dette og få brugernavnet ud:
he he - I er nogle hajer :) Fennec: jeg har prøvet at ændre det du foreslog i starten. Er det nu sikkert? Kingmedia: Skal jeg også ændre det du forslog (Function unQuote(st....), eller virker det nu? /Kim
Det er fordi du mangler samme tjek på første databaseopslag (det som kingmedia arbejder på).
Du kan desuden forkorte dit tjek. Og gøre det mere simpelt. Der er nemlig ingen grund til at lave det første tjek. Der skal ikke mere end dette til:
strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../../DB/database.mdb") Set myConn = Server.CreateObject("ADODB.Connection") strSQL = "SELECT * FROM user where (username = '" & replace(Request("username"),"'","''") & "') and (password ='" & replace(Request("password"),"'","''") & "')" Set ez = myConn.Execute(strSQL) if not ez.eof then 'Log ind Session("login") = "yes mate" Session("UserID") = ez("ID") Session("Password") = ez("password") session("UserName") = ez("username") EZ.Close Conn.Close Response.Redirect "result.asp" else 'Ikke godkendt Session("login") = "" error = "Du blev ikke godkendt af systemet" end if
He he - du rykker :) Jeg har prøvet at skifte hele smøren ud med dig forslag, men så får jeg denne fejl: Operation is not allowed when the object is closed. /intern/login.asp, line 25 Her er linie 25: Set ez = myConn.Execute(strSQL) /kim
Lige for at være sikker, så... Dette skal ind på result.asp: Request.Form("Box_ja") <> "" then Response.Cookies("hapkido-arkivet.dk")("navn") = Request.form("Username") Response.Cookies("hapkido-arkivet.dk")("pass") = Request.form("PassWord") Response.Cookies("hapkido-arkivet.dk").Expires = Date+365 end if
Denne skal på login.asp: LoginName = Request.Cookies("hapkido-arkivet.dk")("navn") LoginPass = Request.Cookies("hapkido-arkivet.dk")("pass")
Hej Jeg er hjemme nu, og min ftp staller hele tiden, så det tager 100 år at opdatere. Jeg venter med cookie'n i morgen. Jeg kan logge på nu, men den ny kode du gav. Dog er teksten "Du blev ikke godkendt af systemet" på hele tiden
Smid en if omkring hele login tjekket, så det kun bliver kørt når man prøver at logge på.
if Request("username") <> "" and Request("password") <> "" then strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../../DB/database.mdb") Set myConn = Server.CreateObject("ADODB.Connection") strSQL = "SELECT * FROM user where (username = '" & replace(Request("username"),"'","''") & "') and (password ='" & replace(Request("password"),"'","''") & "')" Set ez = myConn.Execute(strSQL) if not ez.eof then 'Log ind Session("login") = "yes mate" Session("UserID") = ez("ID") Session("Password") = ez("password") session("UserName") = ez("username") EZ.Close Conn.Close Response.Redirect "result.asp" else 'Ikke godkendt Session("login") = "" error = "Du blev ikke godkendt af systemet" end if end if
Det skulle være sikkert nu. Jeg kan i hvert fald ikke fuske med brugernavn og password, som man ellers kan mange steder. Så skal du til at hacke med "rigtige" programmer for at få adgang, og det er vist ikke nødvendigt at teste for :o)
Fedt at vide - det var lidt skræmmende at den oprindelige kode var så "hullet". Profferne kan man nok ikke hindre adgang, men det er nok ikke lige min web de går efter. Når vi snakker om cooki'en, så siger du at jeg skal skifte denne værdi ud: value="<%=strbrugernavn%> med value="<%= LoginName %>. Er det fordi det er et levn fra den "gamle" kode, som nu kun er nødvendig når vi snakker cookies? /Kim
Hmm, det cookie sjov det virker i Opera, men ikke mozilla og IE. Det er ikke besværet værd, så jeg piller det af igen :) Tak for hjælpen begge to - Fedt i hjalp med en løsning. poster i et svar? Så sætter 45 til Fennek og 15 til kingmedia. /Kim
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.