23. juli 2002 - 10:44Der er
20 kommentarer og 3 løsninger
Hvordan kan man lave nedenstående password login sikre ???
Jeg kunne godt tenke mig at vide hvordan man kan lave det her sikre, problemet er at når der er nogen der har logget ind 1. gang så kan de nogle gange resikere at komme ind på den forkerte konto ?!! jeg går udfra det har noget med sessions at gøre ??
her kommer koden :
<% If Request.Form("Action") = "Login" Then strWmId = Trim(Replace(Request.Form("Username"),"'","")) strPWD = Trim(Replace(Request.Form("Password"),"'",""))
If Len(strWmId) > 0 And Len(strPWD) > 0 Then %> <!--#include file="ConnectDb.inc"--> <% strSQL = "SELECT * FROM Merchant"&_ " WHERE (Username = '" & strWmId & "')"&_ " AND (Password = '" & strPWD & "')" Set rs = Conn.Execute(strSQL)
If Not Rs.EOF Then Session("Id") = Rs("Id") Session("FullName") = Rs("FullName") Session("login") = "True" Response.Redirect "AccWeb.asp" Else Error = "<b><font color='#CE6B31'>Invalid Username or Password !</font></b>" End If End If End If %>
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
Hmmmm....det er faktisk nøjagtig samme måde jeg selv gør det på, men har aldrig haft nogle problemer med det, så jeg følger lige "slagets gang" her fra sidelinien...
Du har husket den oplagte fejl som mange laver.. at ændre ' til enten '' eller tom.
Hvis du ikke vil havde folk forsøger at polle din side som tjekker brugernavn/password, så kan du på den side form'en ligger på sætte en Session og tjekke session er sat inden du tjekker for brugernavn og password... Hvis jeg nu laver et program som står og poster en form til din side vil jeg måske en gang være heldig og ramme rigtigt, det kan du så sikre ved at du sætter en Session varialbe på form siden.
If (Request.Form("Action") = "Login") AND Session("login") = "formside" Then
Ligeleds kan du tjekke om det er den rigtig fil som postede form'en, med Requiest.ServerVarables("HTTP_REFERER"), der får du både servernavn + foler + sti, så det er let at tjekke om det passer:
Men det er vist mest hardcore hacker som begynder at selv sende form til login tjekkeren for at finde et brugernavn og password. Husk Session er ikke 100% sikker men det er det bedste vi har...
Synes godt om
Slettet bruger
23. juli 2002 - 11:09#4
Well.. nok et dum spørgsmål, men er di sikker på du ikke har to brugere med samme brugernavn og/eller pass!?
Jeg ville personligt aldrig lave:
strSQL = "SELECT * FROM Merchant WHERE (Username = '" & strWmId & "') AND (Password = '" & strPWD & "')"
På denne måde godkender du brugeren hvis der blot findes noget i databasen (og dette kan så omgåes ved at indtaste noget, der modificerer din SQL-sætning, så der altid vil findes noget).
Jeg kan ikke huske linket, men dette er blevet diskuteret her på eksperten.
JEg ville søge efter brugernavnet i databasen:
strSQL = "SELECT * FROM Merchant WHERE (Username = '" & strWmId & "')"
og så ville jeg derefter spørge om password er korrekt:
If Rs.EOF 'Der blev ikke fundet nogen bruger Else If Rs("Password") = strPWD Then 'Brugeren godkendt (log ham ind) Else 'Password forkert End If End If
Hvis dette ikke løser det, vil jeg meget gerne se den kode, du bruger for at beskytte, de asp-sider, der beskyttet med password.
Jeg kan ikke se hvordan sessioner skulle have noget med dette at gøre. Sessioner bliver ikke genbrugt (så længe serveren ikke genstartes), så en bruger kan ikke overtage en anden brugers session.
Du må forklare hvad du mener med, at de kommer ind på en forkert konto...
Du kan ændre denne til ikke bare at tjekke om der noget i recordsetet:
If Not Rs.EOF Then
Til at tjekke at brugernavn og password er det samme som man indtastede, hvis der er nogle som kender til andre uheldigheder i SQL..
If Not Rs.EOF Then if LCase(rs("Username")) = LCase(strWmId) AND LCase(rs("Password")) = LCase(strPWD) then Session("Id") = Rs("Id") Session("FullName") = Rs("FullName") Session("login") = "True" Response.Redirect "AccWeb.asp" end if end if 'Dette behøves ikke være i Else dele for hvis man kommer hertil er der forkert brugernavn eller password Error = "<b><font color='#CE6B31'>Invalid Username or Password !</font></b>"
Jeg synes også det ser ganske fornuftigt ud. Måske skulle du lige rs.close før du redirecter. Og hvis invalid username/password, så blank session-variablerne ud igen.
Det er efterhånden blevet en tradition at jeg siger dette :-)
Hvis du beslutter dig for at følge eagleeye's gode råd om anvendelse af Request.ServerVarables("HTTP_REFERER"), skal du forholde dig til hvad du vil gøre, hvis denne information er blank.
Flere og flere (ikke mindst ADSL kunder) benytter en firewall som ZoneAlarm eller Norman Personal Firewall. Mange af disse er standard konfigureret til at skjule referer siden, for at beskytte brugeren. Det betyder at du sandsynligvis vil opleve at et sted mellem nogle og mange af dine brugere ikke vil understøtte denne.
Du skal derfor beslutte dig for om disse tilfælde skal ignoreres eller de i så fald ikke kan benytte din side.
Okay, svarene ser rigtige ud, men for en sikerheds skyld forklarer jeg lige hvordan man opdagede fejlen.
Man oprettede en konto med brugernavn og password. herefter gik man væk fra webstedet og kom tilbage igen og oprettede en nu konto. så loggede man ind med det 1 konto navn og kom ind på en 3 mands konto (3 mands konto skulle han aldrig have haft adgang til) !!! meget besynderligt, for når jeg tester internt på systemet, så kan jeg aldrig få den fejl !!
Synes godt om
Slettet bruger
23. juli 2002 - 11:27#10
Igen: jeg ville gerne se den kode, du bruger til at beskytte dine sider med...
Som det tidligere er indikeret, lyder det som om at der er flere brugere med samme brugernavn i databasen. Brugernavn bør være unik i databasen og dette bør håndteres af en constraint i databasen (primary key el. index).
Synes godt om
Slettet bruger
23. juli 2002 - 11:57#13
Ja det eneste jeg kan se, er, at den forkerte bruger findes i databasen.
Prøv at ændre din kode. Det det første og eneste man skal se, efter godkendt login er brugerID og evt. brugernavn på den konto, der lige er blevet logget ind....
Prøv så igen at "simulere" den situation, hvor fejlen opstår (hvis muligt), og se om du kan bruge dette til at "fange" fejlen.
Jeg har med sucess brugt lign. metoder som i mit tidligere svar, til at logge brugere ind, så hvis du har prøvet at bruge en af de metoder, som er forelået af os i dette spm., så tror ikke det er i denne kode/fil, problemet ligger.
Er der ikke en der gider at skrive det eksagte/hele kode som jeg skal bruge og som i mener er den sikreste udfra det der er skrevet her, så jeg kan copy/paste det og få det testet ??
Nu er det en forholdsvis lille database jeg selv har, så jeg bruger session-variable til at holde styr på brugerne vha.
<% If Session("DitSessionID") <> Session.SessionID Then Response.Redirect "loginform.asp" End If %>
Når brugeren logger på, tildeles de et SessionID og hvis dette ID ikke matcher det "løbende" SessionID, smides de til login side. Samme gør sig gældende, hvis de logger af.....så bliver deres Session afsluttet.
Yeah, eagleeye, det er bedre bare at skrive "Invalid username or password!", så kan brugeren selv gætte på hvilket af dem der er forkert...(en løsning jeg selv sværger til)
Jeg ville lave det sådan her, husk LCase på dine if sætnigner som tjekker strenge da "Pass" ikke er det samme som "pass"... Hvis du har Access så er den ikke case senativ så den den er ligeglad mad Case..:
<% If Request.Form("Action") = "Login" Then strWmId = Trim(Replace(Request.Form("Username"),"'","")) strPWD = Trim(Replace(Request.Form("Password"),"'",""))
If Len(strWmId) > 0 And Len(strPWD) > 0 Then %> <!--#include file="ConnectDb.inc"--> <% strSQL = "SELECT * FROM Merchant"&_ " WHERE (Username = '" & strWmId & "')"&_ " AND (Password = '" & strPWD & "')" Set rs = Conn.Execute(strSQL)
If Not Rs.EOF Then If LCase(rs("Username")) = LCase(strWmId) AND LCase(rs("Password")) = LCase(strPWD) then Session("Id") = Rs("Id") Session("FullName") = Rs("FullName") Session("login") = "True" Response.Redirect "AccWeb.asp" End IF End If Error = "<b><font color='#CE6B31'>Invalid Username or Password !</font></b>" End If End If %>
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.