Avatar billede sapworld Nybegynder
23. september 2004 - 12:06 Der er 32 kommentarer og
2 løsninger

Er dette login script sikkert + nye features

Hej Einstein'er
Jeg har et spørsmål ang. sikkerhed. Jeg bruger nedenstående login script:

Login side:
  <%

SET RS = Server.CreateObject("ADODB.Connection")
rs.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../../DB/database.mdb")

If Request("mode") = "Check" then

Function unQuote(strTekst)
  strTekst = Trim(strTekst)
  unQuote = Replace(strTekst,"%","53")
End Function

    ' Gemmer formfelterne i Variabler
        strUsername = unQuote(request("username"))
        strPassword = unQuote(request("password"))

  Sql = "Select Count(*) as Found from user where (username = '" & strUsername  & "') and (password ='" & strPassword  & "')"
  Set LO = RS.Execute(Sql)
  if LO("Found") = 0 then
    Session("login") = ""
    error = "Du blev ikke godkendt af systemet"
  else
  strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../../DB/database.mdb")
  Set myConn = Server.CreateObject("ADODB.Connection")
  myConn.Open strDSN
  strSQL = "SELECT * FROM user where (username = '" & Request("username") & "') and (password ='" & Request("password") & "')"
  Set ez = myConn.Execute(strSQL)
    Session("login") = "yes mate"
    Session("UserID") = ez("ID")
    Session("Password") = ez("password")
    session("UserName") = ez("username")
    Response.Redirect "result.asp"
    EZ.Close
    RS.Close
    Conn.Close
  end if
end if
%>


På de sider der skal beskyttes:

<%
if session("login") = "" Then
Response.redirect("login.asp")
end if
%>


1. Er det et sikkert logon script, eller er det nemt at omgå?. Hvis der f.eks. er en der bruger det samme script og kender adressen på mine sider, kan han så "hoppe" over på disse og derved snyde det, ved at logge ind på sin egen side først???
2. Kan man tilføje en checkbox "husk mit login" til scriptet
3. Kan man lave en log af funktion, så man ikke hænger i browserens hukommelse i 20 min.

/Kim
Avatar billede fennec Nybegynder
23. september 2004 - 12:14 #1
du skal som minimun have "deaktiveret" ' tegnet.

strSQL = "SELECT * FROM user where (username = '" & replace(Request("username"),"'","''") & "') and (password ='" & replace(Request("password"),"'","''") & "')"

ellers kan man logge på med:
username: ' or username like '%%
password: ' or password like '%%
Avatar billede KingMedia Novice
23. september 2004 - 12:27 #2
log af funktionen er hurtigt klaret...

<a href="logout.asp">Log af</a>

i logout.asp skriver du bare

<%
Session.Abandon()
Response.Redirect("/Default.asp")
%>

/Mads
Avatar billede KingMedia Novice
23. september 2004 - 12:29 #3
du kan selvfølgelig også lave den som en "mode"

med dinFil.asp?mode=logout

<%
If Request.QueryString("mode") = "logout" Then
      Session.Abandon()
      Response.Redirect("/")
End If
%>
Avatar billede fennec Nybegynder
23. september 2004 - 12:36 #4
is du vil huske en brugers logen skal du til at sætte en cookie. når du logger ind.

if Request.Form("DinCheckBox") <> "" then
  Response.Cookies("EtNavnTilCookien")("navn") = Request.form("Username")
  Response.Cookies("EtNavnTilCookien")("pass") = Request.form("PassWord")
  Response.Cookies("EtNavnTilCookien").Expires = Date+365
end if

Kan så hentes ud på igen med:
LoginName = Request.Cookies("EtNavnTilCookien")("navn")
LoginPass = Request.Cookies("EtNavnTilCookien")("pass")
Avatar billede sapworld Nybegynder
23. september 2004 - 12:39 #5
Fennec: du helt sikker på det???? Jeg kan ikke, men det kunne være fedt hvis du gad prøve: http://www.hapkido-arkivet.dk/intern/login.asp

Kingmedia: hvad er fordelen/ulemper på de 2 måder???

/kim
Avatar billede fennec Nybegynder
23. september 2004 - 12:48 #6
Den virkere ikke, men
' or '2'='2

som navn og pass gjorde :o)
Avatar billede fennec Nybegynder
23. september 2004 - 12:49 #7
jeg fik denne frem:

Du er inde :(: XXYYQQ
Avatar billede KingMedia Novice
23. september 2004 - 12:50 #8
sapworld >>  der er faktisk ingen fordele eller ulemper ved de to måder, det er bare to forskellige måder at kalde den samme "funktion" på.

Så snart du bruger Session.Abandon() , så nedlægges alle brugerens sessions, som du har oprettet :)

/Mads
Avatar billede KingMedia Novice
23. september 2004 - 12:51 #9
fennec er inde på det rigtige , og du har en funktion til det, men kan bare ikke se at den gør det rigtige..


Function unQuote(strTekst)
  strTekst = Trim(strTekst)
  unQuote = Replace(strTekst,"%","53")
End Function


den burde hedde noget andet, nemlig

Function unQuote(strTekst)
  strTekst = Trim(strTekst)
  unQuote = Replace(strTekst,"'","''")
End Function
Avatar billede KingMedia Novice
23. september 2004 - 12:53 #10
en anden "sikkerhedsmæssig" synsvinkel.

generelt er det en god idé IKKE at kalde sine loginfelter (både loginformen og databasen) for username og password, eller UN og PW, da de er nogle af de første der tjekkes på i bruteforce programmer.

/Mads
Avatar billede fennec Nybegynder
23. september 2004 - 13:02 #11
Det er ikke helt rigtige at Session.Abandon() nedlægger sessions så snart den bliver brugt. Den virker først når man skifter side. F.eks kan man godt gøre dette og få brugernavnet ud:

Session.Abandon()
response.write session("UserName")

men det er jo lige meget når du laver en redirect lige efter abandon :o)

mine erfaringer med abandon er også at den ikke aldid virker. Jeg foretrækker derfor at nulstille mine vigtige sessions selv.

Session("login") = ""
Session("UserID") = ""
Session("Password") = ""
session("UserName") = ""
Session.Abandon()
response.redirect("TilEnSide.asp")
Avatar billede KingMedia Novice
23. september 2004 - 13:04 #12
fennec >  korrekt korrekt :o)

Jeg har bare aldrig oplevet, at den har holdt nogen af mine sessions i live, selvom jeg kun har brugt session.abandon() og så redirectet :o)
Avatar billede sapworld Nybegynder
23. september 2004 - 13:12 #13
he he - I er nogle hajer :)
Fennec: jeg har prøvet at ændre det du foreslog i starten. Er det nu sikkert?
Kingmedia: Skal jeg også ændre det du forslog (Function unQuote(st....), eller virker det nu?
/Kim
Avatar billede fennec Nybegynder
23. september 2004 - 13:16 #14
kingmedia >>
Jeg tror heller ikke det er et problem mange steder, men på vores servere er det desværre :(
Avatar billede KingMedia Novice
23. september 2004 - 13:40 #15
sapworld  >> det her burde virke :o)

Function unQuote(strTekst)
  strTekst = Trim(strTekst)
  unQuote = Replace(strTekst,"'","''")
End Function


fennec >> ok, det er sgu da surt, alle de servere jeg har prøvet på , tilmed Linux servere med Chili!Asp, der fungerer det fint.
Avatar billede fennec Nybegynder
23. september 2004 - 13:57 #16
Damn nu hacker jeg for vildt :o)

Du er inde igen :( AAGGBB
Avatar billede fennec Nybegynder
23. september 2004 - 14:04 #17
Det er fordi du mangler samme tjek på første databaseopslag (det som kingmedia arbejder på).

Du kan desuden forkorte dit tjek. Og gøre det mere simpelt. Der er nemlig ingen grund til at lave det første tjek. Der skal ikke mere end dette til:

strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../../DB/database.mdb")
Set myConn = Server.CreateObject("ADODB.Connection")
strSQL = "SELECT * FROM user where (username = '" & replace(Request("username"),"'","''") & "') and (password ='" & replace(Request("password"),"'","''") & "')"
Set ez = myConn.Execute(strSQL)
if not ez.eof then
  'Log ind
  Session("login") = "yes mate"
  Session("UserID") = ez("ID")
  Session("Password") = ez("password")
  session("UserName") = ez("username")
  EZ.Close
  Conn.Close
  Response.Redirect "result.asp"
else
  'Ikke godkendt
  Session("login") = ""
  error = "Du blev ikke godkendt af systemet"
end if
Avatar billede sapworld Nybegynder
23. september 2004 - 14:45 #18
He he - du rykker :)
Jeg har prøvet at skifte hele smøren ud med dig forslag, men så får jeg denne fejl:
Operation is not allowed when the object is closed.
/intern/login.asp, line 25
Her er linie 25:
Set ez = myConn.Execute(strSQL)
/kim
Avatar billede sapworld Nybegynder
23. september 2004 - 14:54 #19
Lige for at være sikker, så...
Dette skal ind på result.asp:
Request.Form("Box_ja") <> "" then
  Response.Cookies("hapkido-arkivet.dk")("navn") = Request.form("Username")
  Response.Cookies("hapkido-arkivet.dk")("pass") = Request.form("PassWord")
  Response.Cookies("hapkido-arkivet.dk").Expires = Date+365
end if

Denne skal på login.asp:
LoginName = Request.Cookies("hapkido-arkivet.dk")("navn")
LoginPass = Request.Cookies("hapkido-arkivet.dk")("pass")

Er det korrekt?

/Kim
Avatar billede fennec Nybegynder
23. september 2004 - 15:08 #20
Jeg glemte lige at åbne forbindelsen til databasen :o)

myConn.Open strDSN
Avatar billede fennec Nybegynder
23. september 2004 - 15:13 #21
Sådan:

if not ez.eof then
  'Log ind
  Session("login") = "yes mate"
  Session("UserID") = ez("ID")
  Session("Password") = ez("password")
  session("UserName") = ez("username")
  if Request.Form("Box_ja") <> "" then
    'Opret cookie.
    Response.Cookies("hapkido-arkivet.dk")("navn") = Request.form("Username")
    Response.Cookies("hapkido-arkivet.dk")("pass") = Request.form("PassWord")
    Response.Cookies("hapkido-arkivet.dk").Expires = Date+365
  end if
  EZ.Close
  Conn.Close
  Response.Redirect "result.asp"
else


Din form:
<%
'læs fra cookie.
LoginName = Request.Cookies("hapkido-arkivet.dk")("navn")
LoginPass = Request.Cookies("hapkido-arkivet.dk")("pass")
%>
<input type="text" name="Username" value="<%= LoginName %>">
<input type="text" name="PassWord" value="<%= LoginPass %>">
Avatar billede sapworld Nybegynder
23. september 2004 - 15:56 #22
Hej
Jeg er hjemme nu, og min ftp staller hele tiden, så det tager 100 år at opdatere. Jeg venter med cookie'n i morgen.
Jeg kan logge på nu, men den ny kode du gav. Dog er teksten  "Du blev ikke godkendt af systemet" på hele tiden

Gider du stres teste den igen :)

/kim
Avatar billede fennec Nybegynder
23. september 2004 - 16:09 #23
Smid en if omkring hele login tjekket, så det kun bliver kørt når man prøver at logge på.

if Request("username") <> "" and Request("password") <> "" then
  strDSN = "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../../DB/database.mdb")
  Set myConn = Server.CreateObject("ADODB.Connection")
  strSQL = "SELECT * FROM user where (username = '" & replace(Request("username"),"'","''") & "') and (password ='" & replace(Request("password"),"'","''") & "')"
  Set ez = myConn.Execute(strSQL)
  if not ez.eof then
    'Log ind
    Session("login") = "yes mate"
    Session("UserID") = ez("ID")
    Session("Password") = ez("password")
    session("UserName") = ez("username")
    EZ.Close
    Conn.Close
    Response.Redirect "result.asp"
  else
    'Ikke godkendt
    Session("login") = ""
    error = "Du blev ikke godkendt af systemet"
  end if
end if

Det skulle være sikkert nu. Jeg kan i hvert fald ikke fuske med brugernavn og password, som man ellers kan mange steder. Så skal du til at hacke med "rigtige" programmer for at få adgang, og det er vist ikke nødvendigt at teste for :o)
Avatar billede sapworld Nybegynder
23. september 2004 - 16:30 #24
Fedt at vide - det var lidt skræmmende at den oprindelige kode var så "hullet". Profferne kan man nok ikke hindre adgang, men det er nok ikke lige min web de går efter.
Når vi snakker om cooki'en, så siger du at jeg skal skifte denne værdi ud: value="<%=strbrugernavn%> med  value="<%= LoginName %>. Er det fordi det er et levn fra den "gamle" kode, som nu kun er nødvendig når vi snakker cookies?
/Kim
Avatar billede sapworld Nybegynder
23. september 2004 - 17:02 #25
Jeg fik også cookien til at virke :)
Er der en måde man kan "deaktivere" den på hvis man fortryder?

/Kim
Avatar billede sapworld Nybegynder
23. september 2004 - 17:03 #26
Altså hvis brugeren ikke længere vil have sit password husket, eller han har ændret det?
Avatar billede sapworld Nybegynder
23. september 2004 - 17:27 #27
Hmm, det cookie sjov det virker i Opera, men ikke mozilla og IE. Det er ikke besværet værd, så jeg piller det af igen :)
Tak for hjælpen begge to - Fedt i hjalp med en løsning.
poster i et svar?
Så sætter 45 til Fennek og 15 til kingmedia.
/Kim
Avatar billede sapworld Nybegynder
23. september 2004 - 17:30 #28
Hvor dævlen er det nu man ændrer pointene fra 30 til 60 - plejer man ikke at klikke på flaget i toppen?
/Kim
Avatar billede KingMedia Novice
23. september 2004 - 18:33 #29
fedt du fik løst dit problem :o)

ved ikke hvordan man splitter points..

/Mads
Avatar billede sapworld Nybegynder
24. september 2004 - 03:09 #30
Jeg kan sagtens splittet points, men der er hjulpet meget i denne tråd, så jeg ville lægge flere på. Det kan jeg ikke lige finde stedet af gøre.
/Kim
Avatar billede fennec Nybegynder
24. september 2004 - 08:20 #31
Ekstra point ligger vist som et punkt i "funktioner" menuen til venstre.

Cookie skulle gerne virke i alle browsers, men det skal være slået til. Det kunne være derfor det ikke virkede i mozilla og IE.

Hvis du vil slette en cookie sætter du den bare til tom eller expires til igår.

  if Request.Form("Box_ja") <> "" then
    'Opret cookie.
    Response.Cookies("hapkido-arkivet.dk")("navn") = Request.form("Username")
    Response.Cookies("hapkido-arkivet.dk")("pass") = Request.form("PassWord")
    Response.Cookies("hapkido-arkivet.dk").Expires = Date+365
  else
    'ingen cookie
    Response.Cookies("hapkido-arkivet.dk")("navn") = ""
    Response.Cookies("hapkido-arkivet.dk")("pass") = ""
    Response.Cookies("hapkido-arkivet.dk").Expires = Date-1
  end if
Avatar billede sapworld Nybegynder
24. september 2004 - 14:30 #32
Snedigt - poster du et svar?
/Kim
Avatar billede fennec Nybegynder
27. september 2004 - 08:16 #33
.o) <-- One Eyed Jack
Avatar billede sapworld Nybegynder
27. september 2004 - 13:39 #34
Tak for hjælpen .´)
/Kim
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