Activatie Bericht
Quote:
Uhm.. nee... elke hash in md5 van een andere tekst is anders. Op elke computer is de hash in md5 hetzelfde. Het wordt dus niet random gegenereerd, want dan zou het ook geen goed systeem zijn om wachtwoorden op te slaan...
Quote:
[2] Elke hash is toch anders? Dus als ik bv het ID in de hash zou zetten moet ik toch telkens een andere krijgen?
Uhm.. nee... elke hash in md5 van een andere tekst is anders. Op elke computer is de hash in md5 hetzelfde. Het wordt dus niet random gegenereerd, want dan zou het ook geen goed systeem zijn om wachtwoorden op te slaan...
Ik bedoelde dus dat als ID 1 is de hash anders is dan die van 2.
Dus met een ID dat auto_increment is zou je op deze manier nooit een probleem krijgen met dezelfde hash :)
Ik weet niet waar je het voor maakt maar zolang het geen overheidsinstantie oid is ( en ookal was het dat ) denk ik dat 1 wel genoeg is ... :)
Quote:
Waarom 2 keys?
Ik weet niet waar je het voor maakt maar zolang het geen overheidsinstantie oid is ( en ookal was het dat ) denk ik dat 1 wel genoeg is ... :)
Ik weet niet waar je het voor maakt maar zolang het geen overheidsinstantie oid is ( en ookal was het dat ) denk ik dat 1 wel genoeg is ... :)
Omdat je op die manier de theoretische kans dat je twee keer dezelfde hash in je DB hebt staan elimineert...
En het laat zich raden wat er kan gebeuren als twee gebruikers dezelfde hash hebben en willen activeren (dan wordt dus twee keer de eerste account geactiveerd en de tweede niet).
Elwin
Iedereen hardstikke bedankt :)
Alleen als ik actkey een unieke waarde wil geven, krijg ik de volgernde mysql error:
Fout
SQL-query :
ALTER TABLE `leden` ADD UNIQUE (
`actkey`
)
MySQL retourneerde:
#1062 - Duplicate entry '' for key 2
Nu het volgende probleem bij het aanmelden:
Hij kijkt wel of een gebruikersnaam al in gebruik is, maar niet of het email adress al in gebruik is.
Ik gebruik deze code, maar die werkt niet.
Kan iemand me helpen?
code:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?
$telem = mysql_query("SELECT email FROM leden WHERE gebruikersnaam='".$_POST["gebruikersnaam"]."'") or die($error[1]);
$numem = mysql_num_rows($telem);
if($numem == "1")
{
echo"<center>Dit e-mail adress bestaat al! U moet een ander e-mail adress invullen!</center>";
}
?>
$telem = mysql_query("SELECT email FROM leden WHERE gebruikersnaam='".$_POST["gebruikersnaam"]."'") or die($error[1]);
$numem = mysql_num_rows($telem);
if($numem == "1")
{
echo"<center>Dit e-mail adress bestaat al! U moet een ander e-mail adress invullen!</center>";
}
?>
Gewijzigd op 22/03/2004 20:49:00 door Micha
Quote:
Omdat je op die manier de theoretische kans dat je twee keer dezelfde hash in je DB hebt staan elimineert...
En het laat zich raden wat er kan gebeuren als twee gebruikers dezelfde hash hebben en willen activeren (dan wordt dus twee keer de eerste account geactiveerd en de tweede niet).
Quote:
Waarom 2 keys?
Ik weet niet waar je het voor maakt maar zolang het geen overheidsinstantie oid is ( en ookal was het dat ) denk ik dat 1 wel genoeg is ... :)
Ik weet niet waar je het voor maakt maar zolang het geen overheidsinstantie oid is ( en ookal was het dat ) denk ik dat 1 wel genoeg is ... :)
Omdat je op die manier de theoretische kans dat je twee keer dezelfde hash in je DB hebt staan elimineert...
En het laat zich raden wat er kan gebeuren als twee gebruikers dezelfde hash hebben en willen activeren (dan wordt dus twee keer de eerste account geactiveerd en de tweede niet).
Als je bv zoals ik al eerder zei als hash de ids gebruikt kunnen ze toch nooit hetzelfde worden.
Daarbij komt nog (in mijn geval dan) op het moment van de activatie laat ik de rij met de hash op 0 zetten.
Maar wanneer je 2 verschillende ids hebt kunnen ze toch nooit hetzelfde zijn?
Quote:
activatie.php?key1=4636g43&key2=65ehsdyh533
Nu is key1 dus het wachtwoord in md5, en key2 een random gegenereerd woord.
Ze staan allebij in de database.
Nu wil ik dus kijken of ze
1) Bij elkaar passen
2) Bij welk ID ze horen.
Kan iemand me daarmee helpen?
Nu is key1 dus het wachtwoord in md5, en key2 een random gegenereerd woord.
Ze staan allebij in de database.
Nu wil ik dus kijken of ze
1) Bij elkaar passen
2) Bij welk ID ze horen.
Kan iemand me daarmee helpen?
Dat is een leuk verhaal, maar je laat nergens in je hyperlink terug komen bij welke gebruiker het zou horen. Dat betekend dus dat je alle records gaat doorlopen.
Wat ik zou doen:
activatiemail met de hyperlink met daarin twee variabelen te weten email en sleutel.
De variabele email wordt gevuld met het emailadres en de variabele sleutel wordt gevuld met een md5() van een leuk woordt in combinatie met een random getal.
Vervolgens zet je die hash in de database in de record waar emailadres in voor komt.
Als je in de e-mail de hyperlink aanklikt dan kom je op de pagina daar doe je zoiets:
activatie.php:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?php
if (empty($_GET['email']) || empty($_GET['sleutel']))
{
echo "Deze activering is niet gevonden!";
} else {
// De record opzoeken
$query = mysql_query("SELECT id FROM tabel WHERE email = '$_GET[email]' AND sleutel = '$_GET[sleutel]'");
$num = mysql_num_rows($query);
if (empty($num))
{
echo "Deze activering is niet gevonden!";
} else {
// Fetch het resultaat
$id = mysql_fetch_row($query);
// Update de record... zet activering op Ja of 1 en haal de hash weg uit de record
$update = mysql_query("UPDATE tabel SET sleutel = '', geactiveerd = 'ja' WHERE id = '$id[0]'");
// $id[0] dus uit de eerste query
echo "Activering geslaagd!";
}
}
?>
if (empty($_GET['email']) || empty($_GET['sleutel']))
{
echo "Deze activering is niet gevonden!";
} else {
// De record opzoeken
$query = mysql_query("SELECT id FROM tabel WHERE email = '$_GET[email]' AND sleutel = '$_GET[sleutel]'");
$num = mysql_num_rows($query);
if (empty($num))
{
echo "Deze activering is niet gevonden!";
} else {
// Fetch het resultaat
$id = mysql_fetch_row($query);
// Update de record... zet activering op Ja of 1 en haal de hash weg uit de record
$update = mysql_query("UPDATE tabel SET sleutel = '', geactiveerd = 'ja' WHERE id = '$id[0]'");
// $id[0] dus uit de eerste query
echo "Activering geslaagd!";
}
}
?>
Elwin
Quote:
Als je bv zoals ik al eerder zei als hash de ids gebruikt kunnen ze toch nooit hetzelfde worden.
Daarbij komt nog (in mijn geval dan) op het moment van de activatie laat ik de rij met de hash op 0 zetten.
Maar wanneer je 2 verschillende ids hebt kunnen ze toch nooit hetzelfde zijn?
Daarbij komt nog (in mijn geval dan) op het moment van de activatie laat ik de rij met de hash op 0 zetten.
Maar wanneer je 2 verschillende ids hebt kunnen ze toch nooit hetzelfde zijn?
Nee.. dan kunnen ze niet gelijk zijn...
Elwin
Maar ik zit nu dus bij het andere probleem, zie daarvoor mijn vorige post
Quote:
nou uhm das niet helemaal waarQuote:
Nee.. dan kunnen ze niet gelijk zijn... Als je bv zoals ik al eerder zei als hash de ids gebruikt kunnen ze toch nooit hetzelfde worden.
Daarbij komt nog (in mijn geval dan) op het moment van de activatie laat ik de rij met de hash op 0 zetten.
Maar wanneer je 2 verschillende ids hebt kunnen ze toch nooit hetzelfde zijn?
Daarbij komt nog (in mijn geval dan) op het moment van de activatie laat ik de rij met de hash op 0 zetten.
Maar wanneer je 2 verschillende ids hebt kunnen ze toch nooit hetzelfde zijn?
met md5 is het zo dat meerdere woorden dezelfde hash hebben
zo zouden kip en ei bijvoorbeeld dezelfde hash kunnen hebben
maar de kans dat je een dubbele vind bij een hash als md5 is te verwaarlozen
het zijn 32 hex karakters dus meer dan genoeg mogelijkheden
dit is het script wat bepaalt welke code je krijgt:
$getal[0] = rand(0,61);
$getal[1] = rand(0,61);
$getal[2] = rand(0,61);
$getal[3] = rand(0,61);
$getal[4] = rand(0,61);
$getal[5] = rand(0,61);
$getal[6] = rand(0,61);
$letter = array("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","0","1","2","3","4","5","6","7","8","9");
$letter[0] = $letter[$getal[0]];
$letter[1] = $letter[$getal[1]];
$letter[2] = $letter[$getal[2]];
$letter[3] = $letter[$getal[3]];
$letter[4] = $letter[$getal[4]];
$letter[5] = $letter[$getal[5]];
$letter[6] = $letter[$getal[6]];
$activ = "$letter[0]$letter[1]$letter[2]$letter[6]$letter[4]$letter[5]$letter[6]";
einde van script.
dan wordt bij mij de waarde $activ in de db mee geschreven als je je registreert
daarna krijg je een emailtje met de code erin en ook een link.
en dat werkt goed tot nu toe
maar je kan het ook overdrijven, alsof het zo'n enorm belang is dat mensen niet kunnen raden naar je id.
Wanneer iemand niet binnen twee oogopslagen een sequentie kan vinden, zal niemand niet om iets onbenulligs en nutteloos als dit eindeloos gaan zoeken naar iets om niet een email te hoeven ontvangen?
Zoveel moeite zou ik zelf niet doen: een md5 hash van datum/tijd zou ik denk ik wel tevreden zijn, anders als je werkelijk iets randoms wilt: fetch eens iets uit /dev/urandom oid.
maar in dit geval is het allemaal nutteloos
heb je de hash van 1 weleens vergeleken met de hash van 2 ?
1: c4ca4238a0b923820dcc509a6f75849b
2: c81e728d9d4c2f636f067f89cc14862c
lijkt niet zo heel veel op elkaar toch?
als ze dat raden dan zou ik het heeeeel erg knap vinden
Crackers, Hackers en Scriptkiddo's zouden hier heus wel een md5 hash in herkennen ;) Zelfde brute force trucje, maar dan md5().
Maargoed, wie wil er op deze manier zijn weg in een memberscript cracken? :)
Quote:
Crackers, Hackers en Scriptkiddo's zouden hier heus wel een md5 hash in herkennen ;) Zelfde brute force trucje, maar dan md5().
Herkennen jah ...
Maar ze weten nooit wat er staat dus hebben ze er eigenlijk toch niets aan ...
als ik bijvoorbeeld de hash van "test" zie dan herken ik hem meteen
en ook van een aantal andere woorden die ik gewoon vaak gebruik om te testen
Meestal zal het zoiets zijn als password en username ofsow ...
En wat willen ze er mee bereiken? Iemands account voor hem activeren?
Nope das onzin ... :)
maar af en toe zie je ook systemen waar het minder goed geregeld is.
wat micha bijvoorbeeld van plan was vind ik dan ook geen goed idee (het wachtwoord direct in de link stoppen)
het is dan misschien niet makkelijk om de originele waarde te achterhalen maar een andere waarde die dezelfde hash heeft is (in theorie) nog wel te doen