Avatar billede tblaster Nybegynder
04. maj 2002 - 21:02 Der er 10 kommentarer og
2 løsninger

Login System problem

Hejsa

Jeg har et problem med mit loginsystem ... hvis brugeren angiver et brugernavn som ikke ligger i databasen så melder siden fejl. Hvad skal jeg gøre for at rette dette?

Skal bruge hurtig hjælp!

Her er min side:

<%

  Dim sSeed
  Dim sValidBrugernavn
  Dim sValidPassword
  Dim sValidHash
  Dim sBrugernavn
  Dim sPassword
  Dim sHash
  Dim sGruppenavn
  Dim sInitial
  Dim sFornavn
  Dim sEfternavn

        Set Conn = Server.CreateObject("ADODB.Connection")
        Set Rs = Server.CreateObject("ADODB.Recordset")
            Conn.Open "DBQ=" & Server.Mappath("Login.mdb") & ";Driver={Microsoft Access Driver (*.mdb)};"
   
        SQL = "SELECT Grupper.Gruppenavn, Bruger.Brugernavn, Bruger.Brugerkode, Bruger.Initial, Bruger.Fornavn, Bruger.Efternavn FROM Bruger INNER JOIN Grupper ON Bruger.Gruppenavn = Grupper.GruppeId WHERE Brugernavn='" & request("brugernavn") & "'"
        rs.Open SQL, Conn

sValidBrugernavn = rs("Brugernavn")
sValidPassword = rs("Brugerkode")
sGruppenavn = rs("Gruppenavn")
sInitial = rs("Initial")
sFornavn = rs("Fornavn")
sEfternavn = rs("Efternavn")

  sSeed = Session("auth_seed")
  sValidHash = MD5(sSeed & sValidPassword)
 
  sBrugernavn = Request.Form("brugernavn")
  sPassword = Request.Form("password")
  sHash = Request.Form("hash")
 
%>
<HTML>
<HEAD>
    <TITLE>Sikker Login</TITLE>
</HEAD>
<BODY>

<CENTER>

    <%
        If sSeed = "" Then
            Response.Write "Din session er lukket. Du har enten venter for langtid eller også understøtter din browser ikke cookies."
        ElseIf sBrugernavn = "" Then
            Response.Write "Du har ikke skrevet nogen brugernavn"
        ElseIf LCase(sBrugernavn) <> LCase(sValidBrugernavn) Then
            Response.Write "Brugernavnet er ikke gyldigt"
        ElseIf sHash = "" And sPassword <> "" Then

            If sPassword <> sValidPassword Then
                Response.Write "Adgangskoden er ikke rigtig."
            Else
                Session("auth_granted") = "true"
                Session("auth_Brugernavn") = sBrugernavn
                Session("auth_Gruppenavn") = sGruppenavn
                Session("auth_Initial") = sInitial
                Session("auth_Fornavn") = sFornavn
                Session("auth_Efternavn") = sEfternavn

                Response.Redirect "Secured.asp"

            End If
        ElseIf sHash <> "" Then
            If sHash <> sValidHash Then
                Response.Write "Adgangskoden er ikke rigtig."
            Else
                Session("auth_granted") = "true"
                Session("auth_Brugernavn") = sBrugernavn
                Session("auth_Gruppenavn") = sGruppenavn
                Session("auth_Initial") = sInitial
                Session("auth_Fornavn") = sFornavn
                Session("auth_Efternavn") = sEfternavn

                Response.Redirect "Secured.asp"

            End If           
        Else
            Response.Write "Der er sket en fejl. Prøv venligst igen. Hvis dette fortsætter så kontakt venligst webmaster@havneparken1vejle.dk"
        End If       

    %>
<BR><BR>
    <A HREF="index.asp">Tilbage</A></CENTER>
                           

</BODY>
</HTML>
Avatar billede rune_c Nybegynder
04. maj 2002 - 21:22 #1
prøv at indsætte lige efter din sql sætning:

if rs.EOF = true then
  ' Brugeren findes ikke.
else
  ' her skal resten af scriptet være så det ikke bliver kørt hvis brugeren ikke findes.




end if
Avatar billede tblaster Nybegynder
04. maj 2002 - 21:33 #2
rune ... hvis jeg gør som du siger så skriver den bare at session er lukket ... ?!?!?!?
Avatar billede rune_c Nybegynder
04. maj 2002 - 21:38 #3
prøv med:

SQL = "SELECT Grupper.Gruppenavn, Bruger.Brugernavn, Bruger.Brugerkode, Bruger.Initial, Bruger.Fornavn, Bruger.Efternavn FROM Bruger INNER JOIN Grupper ON Bruger.Gruppenavn = Grupper.GruppeId WHERE Brugernavn='" & request("brugernavn") & "'"

rs.Open SQL, Conn

if rs.EOF = true then
  ' Brugeren findes ikke
else
  sValidBrugernavn = rs("Brugernavn")
  sValidPassword = rs("Brugerkode")
  sGruppenavn = rs("Gruppenavn")
  sInitial = rs("Initial")
  sFornavn = rs("Fornavn")
  sEfternavn = rs("Efternavn")

  sSeed = Session("auth_seed")
  sValidHash = MD5(sSeed & sValidPassword)
 
  sBrugernavn = Request.Form("brugernavn")
  sPassword = Request.Form("password")
  sHash = Request.Form("hash")
end if
Avatar billede tblaster Nybegynder
04. maj 2002 - 22:05 #4
Det var lige det jeg prøvede rune!
Avatar billede rune_c Nybegynder
04. maj 2002 - 22:17 #5
prøv:

<%

  Dim sSeed
  Dim sValidBrugernavn
  Dim sValidPassword
  Dim sValidHash
  Dim sBrugernavn
  Dim sPassword
  Dim sHash
  Dim sGruppenavn
  Dim sInitial
  Dim sFornavn
  Dim sEfternavn
  Dim str

Set Conn = Server.CreateObject("ADODB.Connection")
Set Rs = Server.CreateObject("ADODB.Recordset")
Conn.Open "DBQ=" & Server.Mappath("Login.mdb") & ";Driver={Microsoft Access Driver (*.mdb)};"
   
SQL = "SELECT Grupper.Gruppenavn, Bruger.Brugernavn, Bruger.Brugerkode, Bruger.Initial, Bruger.Fornavn, Bruger.Efternavn FROM Bruger INNER JOIN Grupper ON Bruger.Gruppenavn = Grupper.GruppeId WHERE Brugernavn='" & request("brugernavn") & "'"
rs.Open SQL, Conn

if rs.EOF = true then
  str = "Brugernavnet findes ikke!"
else
  sValidBrugernavn = rs("Brugernavn")
  sValidPassword = rs("Brugerkode")
  sGruppenavn = rs("Gruppenavn")
  sInitial = rs("Initial")
  sFornavn = rs("Fornavn")
  sEfternavn = rs("Efternavn")

  sSeed = Session("auth_seed")
  sValidHash = MD5(sSeed & sValidPassword)
 
  sBrugernavn = Request.Form("brugernavn")
  sPassword = Request.Form("password")
  sHash = Request.Form("hash")
 
  If sSeed = "" Then
      str = "Din session er lukket. Du har enten venter for langtid eller også understøtter din browser ikke cookies."
  ElseIf sBrugernavn = "" Then
      str = "Du har ikke skrevet nogen brugernavn"
  ElseIf LCase(sBrugernavn) <> LCase(sValidBrugernavn) Then
      str = "Brugernavnet er ikke gyldigt"
  ElseIf sHash = "" And sPassword <> "" Then
      If sPassword <> sValidPassword Then
        str = "Adgangskoden er ikke rigtig."
      Else
        Session("auth_granted") = "true"
        Session("auth_Brugernavn") = sBrugernavn
        Session("auth_Gruppenavn") = sGruppenavn
        Session("auth_Initial") = sInitial
        Session("auth_Fornavn") = sFornavn
        Session("auth_Efternavn") = sEfternavn
        Response.Redirect "Secured.asp"
      end if
  ElseIf sHash <> "" Then
      If sHash <> sValidHash Then
        str = "Adgangskoden er ikke rigtig."
      Else
        Session("auth_granted") = "true"
        Session("auth_Brugernavn") = sBrugernavn
        Session("auth_Gruppenavn") = sGruppenavn
        Session("auth_Initial") = sInitial
        Session("auth_Fornavn") = sFornavn
        Session("auth_Efternavn") = sEfternavn

        Response.Redirect "Secured.asp"
      end if
  else
      str = "Der er sket en fejl. Prøv venligst igen. Hvis dette fortsætter så kontakt venligst webmaster@havneparken1vejle.dk"
  End If
End if

%>
<HTML>
<HEAD>
    <TITLE>Sikker Login</TITLE>
</HEAD>
<BODY>

<CENTER>

    <%=str%>
<BR><BR>
    <A HREF="index.asp">Tilbage</A></CENTER>
                           

</BODY>
</HTML>
Avatar billede rune_c Nybegynder
04. maj 2002 - 22:44 #6
noget andet jeg undre mig meget over er:

ElseIf LCase(sBrugernavn) <> LCase(sValidBrugernavn) Then
  str = "Brugernavnet er ikke gyldigt"

hvornår skulle dette ske?? Du finder de poster i din database hvor Brugernavn passer med det brugeren har indtastet. Er det så ikke lidt ligegyldigt??...jo.

Du burde også tjekke for om klienten har indtastet brugernavn eller password før du kører din sql. Fx kunne du i starten skrive:

dim strUid, strPwd

strUid = Trim(Replace(Request.From("brugernavn"), " ' ", " "))
strPwd = Trim(Replace(Request.From("password"), " ' ", " "))

if strUid = "" or strPwd = "" then
  'En af dem er ikke indtastet
  str = "Brugernavn eller password er ikke indtastet!"
else
  Set Conn = Server.CreateObject("ADODB.Connection")
  Set Rs = Server.CreateObject("ADODB.Recordset")
  Conn.Open "DBQ=" & Server.Mappath("Login.mdb") & ";Driver={Microsoft Access Driver (*.mdb)};"
   
  SQL = "SELECT Grupper.Gruppenavn, Bruger.Brugernavn, Bruger.Brugerkode, Bruger.Initial, Bruger.Fornavn, Bruger.Efternavn FROM Bruger INNER JOIN Grupper ON Bruger.Gruppenavn = Grupper.GruppeId WHERE Brugernavn='" & strUid & "' and Brugerkode = '"& strPwd &"'"
rs.Open SQL, Conn

  if rs.EOF = true then
      str = "Brugernavn eller adgangskode er ikke korrekt!"
  else
      If sSeed = "" Then
        str = "Din session er lukket. Du har enten venter for langtid eller også understøtter din browser ikke cookies."
      Else
        Session("auth_granted") = "true"
        Session("auth_Brugernavn") = strUid
        Session("auth_Gruppenavn") = rs("Gruppenavn")
        Session("auth_Initial") = rs("Initial")
        Session("auth_Fornavn") = rs("Fornavn")
        Session("auth_Efternavn") = rs("Efternavn")
        Response.Redirect "Secured.asp"
      End If
End If

desuden bør du aldrig fortælle om det er brugernavnet eller password der er forkert! Altid kun "Brugernavn eller adgangskode er ikke korrekt".

Jeg kan egentlig ikke se hvorfor du tjekker for al det du gør. Som jeg ser kan du nøjes med det jeg har skrevet.

Grunden til at jeg bruger en trim og en replace på brugernavnet og password er af sikkerhedsmæssige årsager. Hvis man ikke gør det kan man logge ind hvis man skriver ' or '1'='1 i brugernavn og password.
Avatar billede tblaster Nybegynder
05. maj 2002 - 13:45 #7
Rune ... jeg kan se det rigtige i det du har skrevet men jeg kan ikke få det til at virke ... du kan også undre dig over at jeg bruger ting som LCase(sBrugernavn) <> LCase(sValidBrugernavn) og henter alle de informationer som jeg gør men det er nemlig af sikkerheds årsager!

Jeg kan stadig ikke få det til at virke!

Det sidste du skrev: (Citat)
Hvis man ikke gør det kan man logge ind hvis man skriver ' or '1'='1 i brugernavn og password.

Hvad er det for noget ... det kan jeg ikke få til at passe ... jeg kan hverken komme igemmem med ' eller ''1'='1 :-D Hvis man bruger ' i brugernavnet så melder siden bare fejl!
Avatar billede rune_c Nybegynder
05. maj 2002 - 14:45 #8
LCase(sBrugernavn) <> LCase(sValidBrugernavn) det vil jo aldrig ske!!! Derfor er det bare spild af plads. Du finder alle dem i din database der har det brugernavn som klienten har indtastet. Derefter tjekker du for om de(n) poster som sql returnerer om det brugernavn er det samme som det der er indtastet. Kan du ikke se det?? Det vil aldrig ske. Den finder dem der er ens hvordan skulle det så ikke være ens længere nede??
Avatar billede rune_c Nybegynder
05. maj 2002 - 14:50 #9
hvad sker der hvis du indtaster:

' or '1'='1

i både brugernavn og password
Avatar billede rune_c Nybegynder
05. maj 2002 - 14:51 #10
og hvad sker der hvis du bare bruger det jeg skrev?
Avatar billede tblaster Nybegynder
05. maj 2002 - 18:50 #11
Hvis jeg skrive:
' or '1'='1
I brugernavn og koden får jeg følgende besked :-) :
Brugernavnet eller Adgangskoden er forkert!

Og hvis jeg bruger det du skrev virker det ikke.
Avatar billede tblaster Nybegynder
05. maj 2002 - 20:02 #12
Fandt en anden udvej ... du får lige nogle point for din hjælp!
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