Avatar billede fredd Nybegynder
15. april 2004 - 14:58 Der er 8 kommentarer

MD5 krypteret login system

Hej..

Jeg har et login system på min side, baseret på en MS Access database... Systemet virker fint, men jeg vil gerne optimere sikkerheden ved at kryptere mine passwords... Jeg har hørt lidt om md5 kryptering og tror det er det rigtige, men jeg ved ikke hvordan jeg får tingene krypteret...! Nogen der kan hjælpe...
Avatar billede -thomas- Nybegynder
15. april 2004 - 15:25 #1
Du kan finde både filer og instruktionerne her: http://pajhome.org.uk/crypt/md5/
Avatar billede -thomas- Nybegynder
15. april 2004 - 15:26 #2
Det fungerer ved, at du først krypterer/hasher passwordet og gemmer det i databasen.
Når en bruger så taster din kode, krypterer du det og sammenligner med det der ligger i databasen. Bemærk at du ikke kan dekryptere koden igen.
Avatar billede fredd Nybegynder
15. april 2004 - 20:42 #3
Ja, men jeg ved ikke hvordan jeg får systemet at køre det gennem scriptet. Mit login system ser således ud:

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

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

    ' Authes user, password, and fixed a known securitybug to many login systems.
        strUsername = Trim(Replace(request("username"),"'","''" ))
        strPassword = Trim(Replace(request("password"),"'","''" ))

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

<br>
<form method="POST" action="login.asp">
<input type="hidden" name="mode" VALUE="Check">

<fieldset style="width: 122; height: 6; padding: 3;">
<legend><font size="1" face="Verdana">Brugernavn</font></legend>
<input class="but" type='text' name='username' style="width: 218px; border-style: solid; border-width: 0; padding-left: 0; padding-right: 0; padding-top: 0; padding-bottom: 0 value="<%=strbrugernavn%>"><br>
</fieldset>

<fieldset style="width: 122; height: 6; padding: 3;">
<legend><font size="1" face="Verdana">Password</font></legend>
<input class="but" type="password" name="password" style="width: 218px; border-style: solid; border-width: 0; padding-left: 0; padding-right: 0; padding-top: 0; padding-bottom: 0 value="<%=strpassword%>"><br>
</fieldset>
<br><br>

<input class="botton" type="submit" value="Login" name="submit" style="border: 1 solid #000000">
<br><br>
<font color="red"><%=error%></font>
</form>

Derudover skal man vel have en side til at lave brugere med kryptere passwords...?
Avatar billede -thomas- Nybegynder
16. april 2004 - 08:44 #4
Jeg ville starte med at rydde lidt op i koden - den kunne vidst gøres en del kortere og meget pænere:

<%
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../database/settings.mdb")

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

  strUsername = Trim(Replace(request("username"),"'","''" ))
  strPassword = Trim(Replace(request("password"),"'","''" ))

  strSQL = "SELECT COUNT(*) AS Found FROM users WHERE username = '" & strUsername  & "' AND password ='" & strPassword  & "'"
  Set rs = Conn.Execute(strSQL)
 
    If rs("Found") = 0 Then
        Session("login") = ""
        error = "Du blev ikke accepteret af systemet..."
    Else
        Session("login") = strUsername
        Response.Redirect "home.asp"
    End if
   
End if

conn.Close
Set conn = Nothing
%>
Avatar billede -thomas- Nybegynder
16. april 2004 - 08:54 #5
Når du så skal lægge md5-krypteringen på skal du hente filen på http://www.freevbcode.com/code/md5_asp.zip og gemme md5.asp i samme mappe som din login.asp. Så burde følgende kode virke (forudsat at du tilsvarende har gemt dine passwords med en md5 kryptering i databasen):

<%
<!--#include file="md5.asp"-->
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../database/settings.mdb")

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

  strUsername = MD5(Trim(Replace(request("username"),"'","''" )))
  strPassword = MD5(Trim(Replace(request("password"),"'","''" )))

  strSQL = "SELECT COUNT(*) AS Found FROM users WHERE username = '" & strUsername  & "' AND password ='" & strPassword  & "'"
  Set rs = Conn.Execute(strSQL)
 
    If rs("Found") = 0 Then
        Session("login") = ""
        error = "Du blev ikke accepteret af systemet..."
    Else
        Session("login") = strUsername
        Response.Redirect "home.asp"
    End if
   
End if

conn.Close
Set conn = Nothing
%>
Avatar billede -thomas- Nybegynder
16. april 2004 - 09:01 #6
Manglede vist lige at lukke dit record-set:

<%
<!--#include file="md5.asp"-->
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../database/settings.mdb")

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

  strUsername = MD5(Trim(Replace(Request("username"),"'","''" )))
  strPassword = MD5(Trim(Replace(Request("password"),"'","''" )))

  strSQL = "SELECT COUNT(*) AS Found FROM users WHERE username = '" & strUsername  & "' AND password ='" & strPassword  & "'"
  Set rs = Conn.Execute(strSQL)
 
    If rs("Found") = 0 Then
        Session("login") = ""
        error = "Du blev ikke accepteret af systemet..."
    Else
        Session("login") = strUsername
        Response.Redirect "home.asp"
    End If

    rs.Close
    Set rs = Nothing
   
End If

Conn.Close
Set Conn = Nothing
%>
Avatar billede jpvj Nybegynder
16. april 2004 - 09:05 #7
Bare for at holde begreberne på plads: Der er IKKE tale om en kryptering, men om en hash funktion.

Forskellen er at en krypto funktion (ex. AES, DES, 3DES osv) er tovejsfunktioner (givet man kender nøglen) hvor en hashfunktion kun er envejs.

En hashfunktion passer således perfekt til passwords, da man kan nøjes med at gemme hashværdien (også kaldet et digest). Når en bruger indtaster et password, beregnes hashværdien af dette og sammenlignes med det gemte.

For en optimal hashfunktion, er bruteforce således eneste mulige måde, at finde et password.
Avatar billede -thomas- Nybegynder
16. april 2004 - 09:18 #8
Det ved jeg - det er bare nemmere at kalde det en kryptering, når det forklares. :)
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