[CMS]E-Mail Verfizierung

Chaosengel_Gabriel

Erfahrenes Mitglied
Hey Leute...
Ich möchte mir nen Verifizierungsskript für E-Mail Adressen schreiben...

Zur Zeit habe ich es so, dass ich beim registrieren, den entsprechenden Link erzeuge, der sich aus denn Pfad-Daten zum Skript und der md5-codierten email adresse zusammen setzt...

Ich prüfe dann mit folgendem Skript:
PHP:
<?php
if(isset($_GET['verify']) AND $_GET['verify'] != '')
{
	$emails = array();
	$sql = "SELECT
	ID,
	Email
	FROM
	User
	";
	$result = mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());
	while($row = mysql_fetch_assoc($result))
	{
		if(md5($row['Email']) == $_GET['verify'])
		{
			$sql = "SELECT
			User
			SET
			Verifyed = '1'
			WHERE
			Email = '".md5(trim($_GET['verify']))."'
			";
			mysql_query($sql) OR die("<pre>\n".$sql."</pre>\n".mysql_error());

			//WEitere DB-Tabellen schreiben...
			
			echo '<div class="center">Ihre E-Mail wurde verifiziert!<br />Sie können sich nun mit ihren Daten einloggen...</div>';
			
			break;
		}
	}
	
}
?>

Oder habt ihr ne andere Idee, wie ich so ne Verifizierung realisieren sollte?

Wo hackt das, denn so wie ich das jetzt hab, funktioniert alles, auch das sperren des Login, ohne Verifizierung^^
Aber das bestätigen der E-Mail Addy an sich funktioniert net :(
 
Die E-Mail-Adresse als Basis zu nehmen, ist keine gute Idee. Denn ist dies bekannt, wird gar kein gültiges E-Mail-Konto mehr benötigt, da man sich den Verifikationsschlüssel ganz einfach selbst machen kann. Besser ist es einen Zufallsschlüssel zu nehmen.


Es heißt übrigens haken wie in Kleiderhaken und nicht hacken wie bei Spitzhacke.
 
mach doch einfach nen sha1-hash auf die soeben angelegte ID des USers....damit haste 1. nen Unique-key (ID) und zweitens haste den Vorteil durch sha1.

md5 ist an sich nicht schlecht, das problem ist nur das du durch 2 völlig verschiedene strings trotzdem den gleichen hash bekommen kannst....sprich md5 generiert keine unique-hashs...

Diesen Hash den du dann mit sha 1 generiert hast platzierste dann in deinen Link, den du wiederum in die Mail schreibst die du and die Adresse schickst, die der USer angegeben hat.

So nun kann der User diese addy wirklich nur noch haben und wenn nicht dann kann er den Acc auch net aktivieren.
Das Problem was besteht, er weiß nicht welche ID sein Datenbankeintrag hat und wenn er die net hat kann er ohne die angabe der richtigen Mail-Adresse die Registrierung auch net bestätigen....

Besser wäre es natürlich wenn du nen Hash aus ID+momentaneZeit erstellst und diesen in der DB ablegst und user_verify oder direkt in der Spalte des Benutzers....will dieser seine Registrierung nun aktivieren....prüfste seinen Hash im Link mit dem in der DB.

Hoffe konnte dir nen bissle helfen.

MFG Nilson
 
Ok, dachte mir schon, dass meine md5 Variante da nich die cleverste is

Und wie erzeuge ich den Hash aus der E-Mail?

Einfach mit sha1($_POST['Email']); !?

Und wie hoch muss ich den VARCHRA in der DB setzen, wenn ich den Hash+Microtime benutze?
 
Warum den Hash+Microtime?

Nutze einfach einen "Salted Hash".

Wie soetwas geht, zeigt dir Gumbo in seinem Tutorial "Sicherheitsfokus: Passwörter sicher speichern.

Das kannste musst du einfach leicht abwandeln und du hast eine sichere Methode (und oft nicht nachvollziehbare) Methode das ganze durchzuführen.


/edti:
[phpf]sha1[/phpf]

Da wird das meiste erklärt.
Und noch als letzter Hinweis: Auch bei sha1() gibt es Kollisionen.
 
Also kann ich auch Passwörter sicherer als mit md5 speichern...
Naja ich seh mir das genannte mal an und danke im vorraus für die Hilfe... ;)

Ergebnisse lass cih hier dann verlauten :lol:
 
mach doch einfach nen sha1-hash auf die soeben angelegte ID des USers....damit haste 1. nen Unique-key (ID) und zweitens haste den Vorteil durch sha1.

md5 ist an sich nicht schlecht, das problem ist nur das du durch 2 völlig verschiedene strings trotzdem den gleichen hash bekommen kannst....sprich md5 generiert keine unique-hashs...
Alle Hash-Funktionen sind sujektiv, da eine unendliche Menge an Eingabewerten auf eine endliche Menge Ausgabewerte (die Hashwerte) abgebildet wird. Bei allen Hash-Funktionen gibt es also zwangsläufig auch Kollisionen.
Nur da MD5 128-Bit- und SHA1 160-Bit-Wörter erzeugt, sind Kollisionen bei MD5 statistisch wahrscheinlicher als bei SHA1.

Doch da du nur einen einmal gültigen Zufallsschlüssel benötigst, brauchst du prinzipiell beide Funktionen gar nicht. Es reicht eine einfache zufällige Zeichenkette zu generieren, die du serverseitig speicherst und gleichzeitig an die E-Mail-Adresse schickst.
 
Ach so... Alles klar, habs geschnallt...

Sollte ich in der Tabelle, dann 2 Spalten, sprich Verfiyed und VerifyCode, um den Code zu speichern und das mittels Verifyed zuprüfen ob bestätigt wurde, oder mach ich einfach die bedingung, wenn VerifyCode == '' !?

Sparsamer vom Code währe wohl letzteres...
Aber wäre das acuh klüger?
 
Am besten verwendest du gleich eine eigene Tabelle, in der sämtliche noch ausstehende Verifizierungen unterschiedlicher Art gesammelt werden.
 
Zurück