24. januar 2004 - 23:39Der er
26 kommentarer og 1 løsning
Bedømmelse af Cookie login
Godaften E
Nu har jeg så fået brugeren logget ind med en cookie, men er det fornuftigt det jeg har lavet? Det vil jeg gerne have jeres kommentarer til.
Al kode forløber i default.asp. I starten af default.asp har jeg indsat følgende:
<% Option Explicit %> <% Response.Buffer = True 'forbindelse osv. If Len(Request.Cookies("deltawings")("Bid")) <> 0 Then Bid = Request.Cookies("deltawings")("Bid") nick = Request.Cookies("deltawings")("nick") pass = Request.Cookies("deltawings")("password") Set rs = Conn.Execute("SELECT * FROM bruger WHERE Bid=" & Bid) If rs("nick") = nick AND rs("BrugerKode") = pass Then Session("nick") = nick End if If rs("admin") = "True" Then Session("admin") = "True" End if rs.Close Set rs = Nothing End if
Jeg er ikke helt klar over hvad LEN gør? En forklaring ønskes.
Senere har jeg en login kode hvor brugeren kan vælge autologin fremover (cookie login): Dim checked 'Hvis brugeren har submittet login formen If Request.ServerVariables("REQUEST_METHOD") = "POST" Then 'Tjecker om felterner er udfydlt nick = Trim(Replace(Request.Form("nick"),"'","''" )) pass = Trim(Replace(Request.Form("adgangskode"),"'","''" )) checked = Request.Form("autologin") 'har brugeren valgt at benytte autologin? If checked <> "" Then Response.Cookies("deltawings")("nick") = nick Response.Cookies("deltawings")("password") = pass Conn.Execute("UPDATE bruger SET autologin = True WHERE nick='" & nick & "' AND BrugerKode='" & pass & "'") End if If nick <> "" AND pass <> "" Then Set rs = Conn.Execute("SELECT * FROM bruger WHERE nick='" & nick & "' AND BrugerKode='" & pass & "'") 'Tjecker om brugeren eksisterer If rs.Eof Or rs.Bof Then Response.Write("<font color='red'><b>Brugernavnet eksisterer ikke</font></b><br>") Else 'tjecker om passwordsne matcher hinanden If rs("BrugerKode") = pass AND rs("nick") = nick Then If checked <> "" Then Response.Cookies("deltawings")("Bid") = rs("Bid") Response.Cookies("deltawings").Expires = date() + 365 End if Session("nick") = rs("nick") Session("admin") = rs("admin") Conn.Execute("UPDATE bruger SET BrugerOnline = True WHERE nick='" & nick & "'") Conn.Execute("UPDATE bruger SET SID = " & Session.SessionID & " WHERE nick='" & nick & "'") Conn.Execute("UPDATE bruger SET BrugerLogInd = Now() WHERE nick='" & nick & "'") Conn.Execute("UPDATE bruger SET BrugerIP = '" & Request.ServerVariables("REMOTE_ADDR") & "' WHERE nick='" & nick & "'") Sub AddOnlineUser() If inStr(1,Application("OnlineUsers"),"," & Session("nick") &",")=0 Then Application.Lock Application("OnlineUsers") = Application("Onlineusers") & Session("nick") & "," Application.UnLock End if End Sub Call AddOnlineUser() Response.Redirect("default.asp") Else Response.Write("<font color='red'><b>Adgangskoden er forkert<br></b></font>") End if Conn.Execute("UPDATE bruger SET autologin = True WHERE nick='" & nick & "'") End if rs.Close Set rs = Nothing Conn.Close Set Conn = Nothing Else Response.Write("<font color='red'><b>Du har ikke udfyldt felterne</b></font><br>") End if End if bla bla bla login form osv.... Der er lidt count antal brugere indblandet heri, men fokuser på cookie login til at starte med. Hvad siger i? :)
Jeg mangler nu også at kunne logge ud, hahah det kan jeg ikke endnu... om ikke jeg skal tilføje i starten af default.asp der hvor jeg requester cookien, at hvis den er requestet én gang så Response.cookie(jeg er blevet aktiveret af brugerens pc). Noget ala det samme skal vel ske i logus koden, bare Response.cookie(nu er jeg altså logget ud lad være med at logge mig ind igen) Husk på at jeg køre al kode i default.asp opdelt i mode = ""
Det kommer an på hvad logud betyder. Jeg har engang lavet et med både "Husk mig" og "Autologin" Jeg laved logud sådan man blev logget af men naturligvis vil den lave autologin så snart man går ind på en side med autologin med mindre det autologin fjernes.
"husk mig" udfyldte selv brugernavn og password på login formen så skulle man selv trykke login. Lige som man kan få IE til at gemme brugernavn og password "autologin" så blev man automatisk logget ind.
Jeg kan ikke kontrollere et autologin på nuværende tidspunkt...
Så jeg har lavet en "Husk mig" funktion... efter inspiration fra eagleeye. Jeg tror det er lavet ok, her er koden:
Først, der er nu blevet mulighed for, under redigering af egen profil, at slå "Husk mig" funktionen til eller fra: Under formen: <tr> <td><font class="main"><b>Husk mig:</b></font></td> <td><% If rs("huskmig") = "True" Then %><input name="huskmig" type="checkbox" checked> <%else%> <input name="huskmig" type="checkbox"> <%end if%></td></tr> Efterfulgt af under rs.Update: bla bla.. If Server.HTMLEncode(Request("huskmig")) <> "" Then Response.Cookies("deltawings")("Bid") = rs("Bid") Response.Cookies("deltawings")("nick") = Server.HTMLEncode(Request("nick")) Response.Cookies("deltawings")("huskmig") = "True" Response.Cookies("deltawings").Expires = date() + 365 Else Response.Cookies("deltawings")("Bid") = rs("Bid") Response.Cookies("deltawings")("nick") = Server.HTMLEncode(Request("nick")) Response.Cookies("deltawings")("huskmig") = "False" Response.Cookies("deltawings").Expires = date() + 365 End if
Under login formen har jeg tilføjet følgende: <form bla bla..> If Request.Cookies("deltawings")("huskmig") = "False" Then huskmig = "False" Else If Len(Request.Cookies("deltawings")("Bid")) <> 0 Then Bid = Request.Cookies("deltawings")("Bid") If isNumeric(Bid) = False Then Bid = 0 Set rs = Conn.Execute("SELECT * FROM bruger WHERE Bid=" & Bid) If Not rs.EOF Then nick = Request.Cookies("deltawings")("nick") pass = rs("BrugerKode") huskmig = "True" End if rs.Close Set rs = Nothing End if End if bla bla.. <input type="text" name="nick" class="form" size="20" <% If huskmig = "True" Then %>value="<%=nick%>"<%else%>value=""><%end if%> bla bla.. <input type="text" name="pass" class="form" size="20" <% If huskmig = "True" Then %>value="<%=pass%>"<%else%>value=""><%end if%> bla bla..
Hvis der skal snyders med cookies, så er det muligt at "suge" Bid og nick for derefter at kunne logge ind via "huskm ig" funktionen, men passwordet bliver ikke vist, heller ikke under rediger egen profil... men her kan snyderen jo ændre passwordet... hmmm...
Kunne det være en ide at autologge ind, på en sådan måde at brugeren bare trykker på login i menuen? Således tror jeg godt jeg kan kontrollere koden...
Eller går ideen så af fløjten...?
Mit problem er at default.asp køre al kode for mig, og jeg sætter div indstillinger under login funktionen, så jeg vil gerne have brugeren hen over mode="login"...
Kunne det være en ide at autologge ind, på en sådan måde at brugeren bare trykker på login i menuen? Ja det var en fin ide. Det er ser før, man lige skal trykke på login, men i stedet for at vises login formen så laver den autologin.
Angående at snyde med cookies, ja det kan være nogle prøver det. For at undgå det er det set man laver en ny kolonne til en bruger og gemmer et random password som ingen kender, på 10-15 karakter alt efter hvad man syntes. Så gemmer du også det password i cookien sammen med bid. Så det næsten umuligt at gætte sig til.
hmm jeg kan ikke helt få det til at give mening i mit hoved :) Hvis jeg bare sætter et random tal i cookien som også er i db'en , så kan snyderen bare suge også dette random tal....
Jeg skal vel du i noget krypering? Eller forstår jeg bare ikke hvordan et random tal skal bruges med cookies?
og så bruge det til at finde en bruger og logge ind med eks: Set rs = Conn.Execute("SELECT * FROM bruger WHERE Bid=" & Bid & " and cpass='" & cpass & "'")
Random tallet bruges på samme måde som eksempelvis password. Så vidt jeg kan se gemmer du også passwordet i cookien, så det kan være alternativt til det.
If rs("nick") = nick AND rs("BrugerKode") = pass Then
ok jeg prøver, men jeg forstår stadigvæk ikke helt det smarte. Fordelen er selvfølgelig at passwordet ikke afsløres på noget tidspunkt, ej heller hvis snyderen logger ind med de informationer som han har suget, det er selvfølgelig en fordel, men ellers er der da ikke nogen fordel. Når jeg mener "suge" så mener jeg ikke gætte sig frem, så tænker jeg på at cookien kopiers, og hvis cookien kopiers, så er alle oplysninger tilgængelige, inkl. random tallet... så random tallet har da ikke nogen særlig smart funktion i det tilfælde...(som jeg forstår det). Angående kryptering, så må problemstillingen være den samme som med random tallet. Hvis en krypteret cookie kopiers, så har snyderen de kryperede data, som han så kan bruge som hvis de ikke var kypteret, severen forventer jo krypterede data i cookien...
Ok, det er noget L... hvis cookien bliver kopiret...
Jeg laver en funtion hvor passwordet (krypteret eller ej) ikke bliver sendt til cookien, derved har jeg sikret brugerens passsword ikke bliver misbrugt...
Godt du mindede mig om at bruge random tal istedet for nick og pass, løsningen bliver et nick og random, jeg vil nu gerne have 2 id'er, bare sådan for "sikkerhedens skyld".
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.