Avatar billede apo Praktikant
25. september 2004 - 16:28 Der er 8 kommentarer og
1 løsning

Sikker login?

Hej.

Jeg har denne kode, der gerne skulle forhindre uønskede i at besøge nogle udvalgte sider, ved at indsætte følgende i toppen af disse sider:

<% Session.Timeout = 60 %>
<%
  If Session("login") = "" Then
      Response.Redirect("login.asp")
  End If
%>

Nu er jeg imidlertid blevet en smule usikker på om den hellige grav nu også er velforvaret (om loginkoden er relativ sikker) :-)

Kan jeg stole på dette login-system, eller mangler der noget for at det bliver mere sikkert?

<% Response.Buffer = True %>
<%
'  S t a r t / C h e c k  f o r m u l a r
'  --------------------------------------------------------------------------------------------------------------------------------------
  If Request("check") = "true" Then

      strBrugernavn = Trim(Replace(request("brugernavn"),"'","''" ))
      strPassword = Trim(Replace(request("password"),"'","''" ))

      If strBrugernavn = "test" AND strKode = "test" Then
        Session("login") = "sessionkode"
        Response.Redirect "start.asp"
      Else
        Session("login") = ""
        Fejl = "Indtast korrekt brugernavn og password"
      End If

  End If

'  A f s l u t / L o g o u t
'  --------------------------------------------------------------------------------------------------------------------------------------
  If Request.QueryString("section") = "slut" AND Request.QueryString("page") = "1" Then

      Session.Abandon
      Response.Redirect "default.asp"

  End If
%>

P.S. Jeg bruger ingen database til login-systemet, men har brugernavn og password liggende i koden (hvilket efter sigende skulle være sikkert).

Apo
Avatar billede apo Praktikant
25. september 2004 - 16:31 #1
Der var en mindre fejl i den første kode, men den er rettet nu:

<% Response.Buffer = True %>
<%
'  S t a r t / C h e c k  f o r m u l a r
'  --------------------------------------------------------------------------------------------------------------------------------------
  If Request("check") = "true" Then

      strBrugernavn = Trim(Replace(request("brugernavn"),"'","''" ))
      strPassword = Trim(Replace(request("password"),"'","''" ))

      If strBrugernavn = "test" AND strPassword = "test" Then
        Session("login") = "sessionkode"
        Response.Redirect "start.asp"
      Else
        Session("login") = ""
        Fejl = "Indtast korrekt brugernavn og password"
      End If

  End If

'  A f s l u t / L o g o u t
'  --------------------------------------------------------------------------------------------------------------------------------------
  If Request.QueryString("section") = "slut" AND Request.QueryString("page") = "1" Then

      Session.Abandon
      Response.Redirect "default.asp"

  End If
%>

Apo
Avatar billede eagleeye Praktikant
25. september 2004 - 16:35 #2
Ja det er ganske sikkert.

Du kan rette:

<% Session.Timeout = 60 %>
<%
  If Session("login") = "" Then
      Response.Redirect("login.asp")
  End If
%>


til dettte så den tjekke på om værdi i session variablen er forskllig fra det du har sat den til:

<% Session.Timeout = 60 %>
<%
  If Session("login") <> "sessionkode" Then
      Response.Redirect("login.asp")
  End If
%>


Når du ikke har en database er der ikke nogen grund til at skifte ' ud med to '' som sker i disse linjer:
      strBrugernavn = Trim(Replace(request("brugernavn"),"'","''" ))
      strPassword = Trim(Replace(request("password"),"'","''" ))
Der sker ikke noget ved at havde dem og hvis du engang får en database koblet på login systemet er det meget vigtig altid at huske at enten fjerne ' helt eller replace en ' med to '' :)
Avatar billede apo Praktikant
25. september 2004 - 16:47 #3
Eagleeye > Jeg har faktisk allerede erstattet:

<%
  If Session("login") = "" Then
      Response.Redirect("login.asp")
  End If
%>

Med:

<%
  If Session("login") <> "sessionkode" Then
      Response.Redirect("login.asp")
  End If
%>

... Jeg har bare anvendt den gamle kode til eksemplet her ;-)

Men det vil altså sige, at jeg kan regne med at koden er (relativ) sikker; at det ikke bare er til at bypasse uden videre?

Hvad med søgemaskiner, søgerobotter, o.s.v. Hvordan reagerer de på den slags loginsystemer? Mit nuværende loginsystem (og siderne) er renset for ord som: login, admin, password, o.s.v. Men er det unødvendigt med dette login-system?

Jeg lader dette:

strBrugernavn = Trim(Replace(request("brugernavn"),"'","''" ))
strPassword = Trim(Replace(request("password"),"'","''" ))

være som det er. Det kan jo være at jeg en dag tilknytter en database til koden :-)

Apo
Avatar billede eagleeye Praktikant
25. september 2004 - 16:59 #4
Ja man kan ikke uden vidre bypasse den. Søgemaskiner når de kigger på siden vil se det samme som hvis man gik ind i på siden med browseren.

Du kan evt. rette så det beskyttede kode er ind i else delen og ikke efter if sætningen:

<%
  If Session("login") <> "sessionkode" Then
      Response.Redirect("login.asp")
  Else
%>

Siden som kun må ses når man er logget ind

<%
  End If
%>
Avatar billede apo Praktikant
25. september 2004 - 17:28 #5
Så jeg skal stadig holde mig fra at bruge ord i titelbar og andre steder på en side, som: admin, password, o.s.v.? Gælder det også i det beskyttede indhold/på de beskyttede sider?

Okay. Hvad ændrer det at man smider <% End If %> ned under f.eks. </html>? Er siderne ikke godt nok beskyttet med en sessionkode?

Apo
Avatar billede eagleeye Praktikant
26. september 2004 - 00:00 #6
Det ændre nok ikke det store andet da redirecten søger for siden forlades, hvis man ikke er logget ind.
Avatar billede apo Praktikant
26. september 2004 - 01:20 #7
Men det ændrer placeringen af <% End If %> noget?

Kan robotter opsnappe ord som admin, password, o.s.v., eller andet indhold, på mine beskyttede sider?

Smid lige et svar, så du kan få points (mit hovedspørgsmål har du jo besvaret).

Apo
Avatar billede eagleeye Praktikant
26. september 2004 - 01:33 #8
Det ændre det på det hvis du ikke havde en redirect ville den vise siden, hvis du flytter det ind i else delen vil den vise en blank side. Men redirecten gør at man ikke kan se siden.

Jeg vel helt hvordan de robotter virker, men de åbner vel siden som vi åbner en siden i en browser. Når man åbner siden vil serveren udgføre koden og sende html outputet til den som åbner siden, og deri vil man ikke kunne se passwordet. Det kræver source koden for at kunne se koden. Ligeledes vil den ikke kunne findes indholdet af den beskyttede side da robotten ikke er logget ind.
Avatar billede apo Praktikant
26. september 2004 - 02:02 #9
Godt så.

Så kan jeg være rimelig sikker (stadig relativt, I know ;-) ) på min login-funktion.

Lidt points til dig, sammen med en tak for din hjælp!

// Lukker

Apo
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