Avatar billede mskjoldp Novice
24. januar 2004 - 23:39 Der 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? :)

/Skjold
Avatar billede mskjoldp Novice
24. januar 2004 - 23:40 #1
Jeg kan se at jeg mangler en kryptering af kodeordet i cookien
/Skjold
Avatar billede eagleeye Praktikant
24. januar 2004 - 23:49 #2
len finder længden af en streng: len("abc") = 3
Avatar billede eagleeye Praktikant
24. januar 2004 - 23:51 #3
En ting du kan gøre at bid også er numerist

Bid = Request.Cookies("deltawings")("Bid")
if isNumeric(Bid)=false then Bid=0


og efter denne:
Set rs = Conn.Execute("SELECT * FROM bruger WHERE Bid=" & Bid)


Tilføje
if not rs.EOF

eller får du fejl hvis bid ikke finde i databasen
Avatar billede mskjoldp Novice
24. januar 2004 - 23:56 #4
ok ... jeg går igang med at rette til.

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 = ""

/Skjold
Avatar billede eagleeye Praktikant
25. januar 2004 - 00:01 #5
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.
Avatar billede mskjoldp Novice
25. januar 2004 - 00:07 #6
Hvilke funktioner lagde du i de to forskellige logins?

Hvad skulle Husk mig til for?

Og hvad skulle autologin til for (behøver du ikke svare på)

/Skjold
Avatar billede eagleeye Praktikant
25. januar 2004 - 00:09 #7
"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.
Avatar billede eagleeye Praktikant
25. januar 2004 - 00:41 #8
Autologin lage jeg i en fil for sig selv som kunne includes på alle de sider som kræver password for at se..

<!--#include file="autologin.asp"-->
Avatar billede mskjoldp Novice
25. januar 2004 - 00:41 #9
vender tilbage senere...
Avatar billede mskjoldp Novice
25. januar 2004 - 00:42 #10
ok, men jeg køre faktisk kun med default.asp og så et par enkelte til at suppler
Avatar billede mskjoldp Novice
25. januar 2004 - 12:43 #11
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..

tjaa, det var vist det, hvordan ser det ud?

/Skjold
Avatar billede mskjoldp Novice
25. januar 2004 - 12:49 #12
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...

/Skjold
Avatar billede mskjoldp Novice
25. januar 2004 - 12:55 #13
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"...

/Skjold
Avatar billede eagleeye Praktikant
25. januar 2004 - 12:56 #14
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.
Avatar billede eagleeye Praktikant
25. januar 2004 - 12:58 #15
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.
Avatar billede mskjoldp Novice
25. januar 2004 - 13:18 #16
hmm det lyder som en god ide. For at forstå det korrekt, så skal jeg lave et random pass der gemmes både i cookien og i db'en?

/Skjold
Avatar billede mskjoldp Novice
25. januar 2004 - 13:21 #17
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?

/Skjold
Avatar billede eagleeye Praktikant
25. januar 2004 - 13:22 #18
Ja begge steder.

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 & "'")
Avatar billede eagleeye Praktikant
25. januar 2004 - 13:27 #19
Ja det kan også kryteres.

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
Avatar billede mskjoldp Novice
25. januar 2004 - 14:40 #20
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...

Er jeg helt gal på den?

/Skjold
Avatar billede eagleeye Praktikant
25. januar 2004 - 14:43 #21
Nej det er heller ikke nødvendig, når man gemmer og bruger passwordet.

Hvis man kopier cookien er der ikke meget at gøre for så har man jo det komplete indhold.
Avatar billede mskjoldp Novice
25. januar 2004 - 14:46 #22
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...

Jeg går i krig med ændrigerne... :)

/Skjold
Avatar billede eagleeye Praktikant
25. januar 2004 - 14:49 #23
Ok,
Men det med random password var et alternativ til at gemme Nick og Password i cookien.

Jeg ved ikke om en cookie har en form for sikkerhed så den ikke viker på andre maskiner, det er jo i princippet bare en text fil.
Avatar billede mskjoldp Novice
25. januar 2004 - 14:56 #24
Ja det er bare en txt fil...

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".

/Skjold
Avatar billede mskjoldp Novice
25. januar 2004 - 15:37 #25
OK det er blevet kodet.

Jeg har brugt et random ord+tal som password:
ordvar = "gnu, hest, blaabaer, stol, fisk, jkl, sdfsdl, sdfjkl, ew32, dsfs, 342, ers, dsfds, sdfwe, wertt"
ordvar = split(ordvar, ",")
randomize
password = ordvar(Int((UBOUND(ordvar)* Rnd))) & Int((10000 * Rnd)) & ordvar(Int((UBOUND(ordvar)* Rnd))) & Int((10000 * Rnd)) & ordvar(Int((UBOUND(ordvar)* Rnd))) & Int((10000 * Rnd)) & ordvar(Int((UBOUND(ordvar)* Rnd))) & Int((10000 * Rnd))

Det udvilkede sig lidt, da jeg fandt det sjovt at rode med... :)

Eagleeye jeg takker endnu engang. Send et svar hvis du vil have points.

/Skjold
Avatar billede eagleeye Praktikant
25. januar 2004 - 15:45 #26
Ok her et svar ;)
Ja det er sjovt rode af med.
Avatar billede mskjoldp Novice
25. januar 2004 - 15:47 #27
jep det var givende :)
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