Avatar billede krel Nybegynder
20. september 2006 - 22:50 Der er 14 kommentarer og
1 løsning

md5 kryptering (ACCESS)

Hey!

Jeg skal beskytte nogle passwords.. og har fundes frem til et spm her på siden...

Jeg har hentet http://www.freevbcode.com/code/md5_asp.zip og så ser det ca. sådan her ud:... (script fra spm!)
<%
<!--#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
%>

Men hvordan giver jeg feltet i DB'en md5 så det bliver det samme som input feltet i login??

jeg har dette tekstfelt til adgangskode når en bruger opretter sig i systemet

<input type="password" name="password" size="20">
(--> hvor skal md5 så lige ind i billedet her?

// c",) Kristian
Avatar billede kjulius Novice
21. september 2006 - 00:41 #1
Vel ca. sådan:

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

strSQL = "INSERT INTO users (username, password) VALUES('" & strUsername & "', '" & strPassword & "')"

Du skal vel have både et username og et password på din form også når du opretter en ny bruger?
Avatar billede kjulius Novice
21. september 2006 - 00:51 #2
I stedet for INSERT INTO var det måske bedre at bruge

strSQL = "SELECT username, password FROM users WHERE username = '" & strUsername 
Set rs = Conn.Execute(strSQL)
If rs.EOF then
  ' Der findes ingen brugere med samme navn - det er OK at oprette...
  rs.AddNew
  rs("username") = strUsername
  rs("password") = strPassword
  rs.Update
End If
Avatar billede kjulius Novice
21. september 2006 - 00:57 #3
Der bør selvfølgelig afsluttes med en close af recordsættet:
rs.close

(det har du glemt i din kode - jeg ved ikke hvad der sker, hvis man bare lukker forbindelsen - burde måske prøve det:-)
Avatar billede krel Nybegynder
21. september 2006 - 18:19 #4
hmm.. tror vi snakker forbi hinanden (uden at have den store kendskab til dette database-på-hjemmeside... så tror lige jeg ligger minde koder op:

Jeg har så valgt at lave en tjek.asp som der linkes til ved 'action' i login.asp hvor man indtaster user + pass - den ser således ud:

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

Dim strBrugernavn, strPassword
strBrugernavn = MD5(Trim(Replace(request.form("Brugernavn"),"'","''" )))
strPassword = MD5(Trim(Replace(request.form("Password"),"'","''" )))

SQL = "SELECT * FROM Personer where Brugernavn= '" & strBrugernavn & "' AND Password= '" & strPassword& "'"
Set rs = Conn.Execute(SQL)

If Not (rs.BOF Or rs.EOF) Then
Session("ID") = rs("ID")
Session("Brugeradgang") = True
Response.redirect "logged.asp"

Else

Response.redirect "fejlogin.asp"
End If

Conn.Close
Set Conn = Nothing
%>

På den side hvor en elev(bruger) kan oprette sig ser det således ud (lavet med FrontPage indsæt formular-funktion):

--------opret.asp----------
<body>
<form method="POST" action="--WEBBOT-SELF--">
    <!--webbot bot="SaveDatabase" SuggestedExt="asp" S-DataConnection="Databasen" S-RecordSource="Personer" U-Database-URL="../fpdb/database.mdb" S-Form-Fields="Husnummer Skype By Fodselsdag Adresse MSN\ messenger Retning Emailadresse Efternavn Fornavn Mobilnummer Etage Telefonnummer Postnummer" S-Form-DBFields="Husnummer Skype By Fodselsdag Adresse MSN\ messenger Retning Emailadresse Efternavn Fornavn Mobilnummer Etage Telefonnummer Postnummer" U-ASP-Include-Url="../_fpclass/fpdbform.inc" startspan S-Builtin-Fields="REMOTE_HOST HTTP_USER_AGENT Timestamp" S-Builtin-DBFields="Fjerncomputer Webbrowsertype Tidsstempel" --><input TYPE="hidden" NAME="VTI-GROUP" VALUE="0"><!--#include file="../_fpclass/fpdbform.inc"--><!--webbot bot="SaveDatabase" endspan i-checksum="34604" -->
    <p><input type="text" name="Fodselsdag" size="20" value="fodselsdag"></p>
    <p><input type="text" name="Fornavn" size="20" value="fornavn"></p>
    <p><input type="text" name="Efternavn" size="20" value="efternavn"></p>
    <p><input type="text" name="Adresse" size="20" value="adresse"></p>
    <p><input type="text" name="Husnummer" size="20" value="husnr"></p>
    <p><input type="text" name="Etage" size="20" value="etage"></p>
    <p><input type="text" name="Retning" size="20" value="RETNING"></p>
    <p><input type="text" name="Postnummer" size="20" value="postnr"></p>
    <p><input type="text" name="By" size="20" value="by"></p>
    <p><input type="text" name="Telefonnummer" size="20" value="tlf"></p>
    <p><input type="text" name="Mobilnummer" size="20" value="mobil"></p>
    <p><input type="text" name="Emailadresse" size="20" value="mail"></p>
    <p><input type="text" name="MSN messenger" size="20" value="MSN"></p>
    <p><input type="text" name="Skype" size="20" value="skype"></p>
    <p><input type="password" name="password" size="20" value="pass"></p>
    <p><input type="submit" value="Send" name="B1"><input type="reset" value="Nulstil" name="B2"></p>
</form>
</body>

Det er så i denne linie jeg gerne vil have lidt md5 ind:
    <p><input type="password" name="password" size="20" value="pass"></p>
og jo de får også et brugernavn men hvis det er samme triks man laver kan det vel blot kopiers...

eller skal jeg ud i og lave opret.asp helt fra bunden?

c",) Kristian
Avatar billede kjulius Novice
21. september 2006 - 21:18 #5
Måske snakker vi forbi hinanden, men nu ikke ret meget, tror jeg. :-)

Principielt så skal man udføre den samme scrambling både når man tjekker i databasen og når man opretter en konto. Altså hvis du scrambler (med MD5) både brugernavn og password inden du tjekker i databasen, er du naturligvis også nødt til at gøre det samme inden du kan oprette en ny bruger:

Ved indlogning:

Brugeren indtaster brugernavn: Lasse233, som via MD5 konverteres til noget ulæseligt
Han indtaster også et passeword: El34ww9, som via MD5 konverteres til noget ulæseligt

Disse to ulæselige værdier bruger du til at slå op i tabellen. Begge disse felter i databasen indeholder altså scramblede brugerinput.

Når du skal oprette en bruger er proceduren helt den samme:
Brugeren vælger et navn (eller får det tildelt): Lasse233
og vælger et password: El34ww9

Igen bliver disse værdier kørt igennem MD5 rutinen og konverteres derved til noget volapyk, som herefter kan gemmes i de dertil indrettede felter i databasen. Man vil derfor aldrig ved at læse i databasen kunne se, hvad brugernavn eller password er, for det vil altid være noget volapyk.

Mange ville nok foretrække kun at scramble password og lade brugernavnet stå i klar tekst, men begge dele er okay.

Så nej, du behøver ikke at starte helt fra bunden. Det eneste du behøver er, ligesom da du tjekkede om brugeren var oprettet, at køre de to felter fra din form (Brugernavn og Password) gennem MD5 rutinen, før du gemmer formens oplysninger i din bruger tabel.

Håber det var forståeligt denne gang... :-)
Avatar billede kjulius Novice
21. september 2006 - 21:26 #6
Jeg har brugt ordet scramble i stedet for kryptere (jeg kunne ikke lige huske det rigtige ord). Men scramble er sådan set også i orden, da det dækker nogenlunde det samme: http://en.wikipedia.org/wiki/Scrambler
Avatar billede krel Nybegynder
21. september 2006 - 21:30 #7
godt! så er vi enige - men det jeg søger er så hvordan dette gøres ved felterne under oprettelse:

hvis jeg nu har denne textbox_
<p><input type="password" name="password" size="20" value="pass"></p>

hvor skal md5 så sættes ind? i login sætter jeg det jo blot foran_
strpassword = MD5(Trim(Replace(request("password"),"'","''" )))

bliver det så til
<p><input type="password" name="password" size="20" value=(md5"pass")></p>?????

c",) Kristian
Avatar billede krel Nybegynder
21. september 2006 - 21:32 #8
eller skal jeg efter textboxen lave et eller andet:
strpassword = md5(password) ????? som så sendes til databasen???

c",) Kristian
Avatar billede kjulius Novice
21. september 2006 - 22:11 #9
Ja... Altså, det jeg havde forestillet mig var noget lignende dette:



--------opret.asp----------
<body>
<form method="POST" action="--WEBBOT-SELF--">
    <!--webbot bot="SaveDatabase" SuggestedExt="asp" S-DataConnection="Databasen" S-RecordSource="Personer" U-Database-URL="../fpdb/database.mdb" S-Form-Fields="Husnummer Skype By Fodselsdag Adresse MSN\ messenger Retning Emailadresse Efternavn Fornavn Mobilnummer Etage Telefonnummer Postnummer" S-Form-DBFields="Husnummer Skype By Fodselsdag Adresse MSN\ messenger Retning Emailadresse Efternavn Fornavn Mobilnummer Etage Telefonnummer Postnummer" U-ASP-Include-Url="../_fpclass/fpdbform.inc" startspan S-Builtin-Fields="REMOTE_HOST HTTP_USER_AGENT Timestamp" S-Builtin-DBFields="Fjerncomputer Webbrowsertype Tidsstempel" --><input TYPE="hidden" NAME="VTI-GROUP" VALUE="0"><!--#include file="../_fpclass/fpdbform.inc"--><!--webbot bot="SaveDatabase" endspan i-checksum="34604" -->

    <p><input type="text" name="Brugernavn" size="20" value="Brugernavn"></p>
    <p><input type="password" name="password" size="20" value="pass"></p>

    <p><input type="text" name="Fodselsdag" size="20" value="fodselsdag"></p>
    <p><input type="text" name="Fornavn" size="20" value="fornavn"></p>
    <p><input type="text" name="Efternavn" size="20" value="efternavn"></p>
    <p><input type="text" name="Adresse" size="20" value="adresse"></p>
    <p><input type="text" name="Husnummer" size="20" value="husnr"></p>
    <p><input type="text" name="Etage" size="20" value="etage"></p>
    <p><input type="text" name="Retning" size="20" value="RETNING"></p>
    <p><input type="text" name="Postnummer" size="20" value="postnr"></p>
    <p><input type="text" name="By" size="20" value="by"></p>
    <p><input type="text" name="Telefonnummer" size="20" value="tlf"></p>
    <p><input type="text" name="Mobilnummer" size="20" value="mobil"></p>
    <p><input type="text" name="Emailadresse" size="20" value="mail"></p>
    <p><input type="text" name="MSN messenger" size="20" value="MSN"></p>
    <p><input type="text" name="Skype" size="20" value="skype"></p>
    <p><input type="password" name="password" size="20" value="pass"></p>
    <p><input type="submit" value="Send" name="B1"><input type="reset" value="Nulstil" name="B2"></p>
</form>
</body>

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

'  Krypter brugernavn og password
Dim strBrugernavn, strPassword
strBrugernavn = MD5(Trim(Replace(request.form("Brugernavn"),"'","''" )))
strPassword = MD5(Trim(Replace(request.form("Password"),"'","''" )))

Dim strSQL, rs
' Undersøg, om det brugernavn brugeren har valgt allerede er i brug...
strSQL = "SELECT * FROM users WHERE username = '" & strUsername 
Set rs = Conn.Execute(strSQL)
If not rs.EOF then
  ' Det valgte brugernavn var desværre allerede i brug

  ' Bed brugeren vælge et andet....


Else
  ' Der findes ingen brugere med samme navn - det er OK at oprette...
  rs.AddNew
  rs("username") = strUsername
  rs("password") = strPassword
  rs("Fodselsdag") = Trim(Replace(request.form("Fodselsdag"),"'","''" ))
  rs("Fornavn") = Trim(Replace(request.form("Fornavn"),"'","''" ))
  rs("Efternavn") = Trim(Replace(request.form("Efternavn"),"'","''" ))
  rs("Adresse") = Trim(Replace(request.form("Adresse"),"'","''" ))
  rs("Husnummer") = Trim(Replace(request.form("Husnummer"),"'","''" ))
' .... og alle de øvrige felter i formen...
 
  rs.Update
End If
rs.close
conn.close
Set rs = Nothing
Set conn = Nothing
%>

Jeg har bare tilføjet de to felter til din form.
Du behøver naturligvis ikke gøre det på nøjagtig samme måde, men jeg håber du kan se idéen. Koden er forøvrigt ikke på nogen måde testet, ligesom den heller ikke indeholder kode til behandling af fejlsituationer som f.eks. hvis det valgte brugernavn allerede bruges...
Avatar billede krel Nybegynder
25. september 2006 - 20:06 #10
okey.. det med brugeren findes allerede tror jeg ikke bliver noget problem, havde tænkt mig at give alle bruger samme brugernavn til siden og til email altså bruger1, bruger1@domaine.dk....

Men det der sker her er vel bare at man seæv foretager kaldet til databasen i stedet for at bruge FP's måde at gøre det på eller hva?

Vil så høre hvordan jeg kan lave en redigering side hvor brugeren selv kan rette personlige data (ikke brugernavn og password!)...

fordi det kan jeg også kun lave med en FP komponent, men vil hellere selv bygge det op så man undgår alle de der FP-koder..?

c"´,) Kristian
Avatar billede kjulius Novice
25. september 2006 - 22:01 #11
Ja, du bliver jo nødt til at gemme informationerne om brugernavn og password fra din login-side (det der på engelsk hedder to maintain state). Det kan gøres på flere måder, f.eks. i en cookie, i en session variabel, i hidden fields i efterfølgende sider, mv.

Herefter bruger du disse informationer, både når du henter informationerne og når du bagefter opdaterer din database.
Avatar billede krel Nybegynder
01. oktober 2006 - 15:45 #12
okey... syns stadig det er lidt sort snak, men jeg vil da forsøge mig frem.. kan vel altid vende tilbage?.. Svar - point.

c",) Kristian
Avatar billede krel Nybegynder
01. oktober 2006 - 16:41 #13
H J Æ L P ! kjulius?

Nu har jeg sidde og rodet med det og nu går det helt i smader! Der sendes intet til databasen og det hjælper ikke når jeg retter den til... (men mine databasenavne formularer osv.)

Jeg ved godt at der kun står 50 point, men de kan i den grad justeres! (opad) Sp jeg vil høre om jeg kan overtale dig til (måske i fællesskab via msn eller lign.) at bygge en opret-side(send info. til databasen) og en rediger-side(hent-ret-send til databasen) op helt fra bunden af?... indeholdende div. med md5 og min database osv.. osv...

c",) Kristian
Avatar billede krel Nybegynder
12. oktober 2006 - 18:14 #14
kjulius ??

Har endelig fået hul igennem - startede helt fra bunden af og er nu også begyndt at forstå lidt af hvad der foregår :)

Men der er en ting der undre mig en hel del, når jeg skriver det med MD5 burde adgangskoden så ikke vises som en masse mærkelig både på 'confirm-siden' og i databasen ????

Det ser føreløbig sådan her ud (kun ASP del):
<%
<!--#include file="md5.asp"-->

Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("testbase.mdb")
Conn.Open DSN

Dim strAdgangskode
strAdgangskode = MD5(Trim(Replace(request.form("Adgangskode"),"'","''" )))

strSQL = "Insert into Personer (Adgangskode) values('strAdgangskode')"

strSQL = "Insert into Personer (Foedselsdag) values('" & Request.Form("Foedselsdag") & "')"
strSQL = "Insert into Personer (Fornavn) values('" & Request.Form("Fornavn") & "')"
strSQL = "Insert into Personer (Efternavn) values('" & Request.Form("Efternavn") & "')"
strSQL = "Insert into Personer (Adresse) values('" & Request.Form("Adresse") & "')"
strSQL = "Insert into Personer (Postnummer) values('" & Request.Form("Postnummer") & "')"
strSQL = "Insert into Personer (By) values('" & Request.Form("By") & "')"
strSQL = "Insert into Personer (Telefonnummer) values('" & Request.Form("Telefonnummer") & "')"
strSQL = "Insert into Personer (Emailadresse) values('" & Request.Form("Emailadresse") & "')"

%>

Er det helt forkert eller hva siden der blot kommer koden fx 111111 i stedet for noget fds135f15gfdsd654dsg (eks på kryp. kode ;)

c",) Kristian
    - smid lige et svar så du kan få point....
Avatar billede krel Nybegynder
18. oktober 2006 - 19:04 #15
jamen så tror jeg der lukkes
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
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

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