Sicherheit einer Benutzeranmeldung

jackob100

Mitglied
Habe da mal so ne kleine Frage:

Ich habe mal schnell so ein Loginbereich gescripted, jetzt wollte ich mal gerne wissen wie ich die Sicherheit noch erhöhen könnte.
Ohne das der Benutzer jedoch eine aufwendigere Login- Funktion hat. SSL verwende ich auch nicht.

Nach dem erfolgreichen Login werden die Daten in der Session gespeichert:
PHP:
function speichereSession( $id, $login, $passwort )
    {
    $_SESSION['id'] = $id;
    $_SESSION['login'] = $login;
    $_SESSION['passwort'] = $passwort;
    }

Danach wird auf jeder Seite der Benutzer überprüft:
PHP:
function ueberpruefeBenutzer()
    {
    $benutzer_daten = holeDaten( "benutzer", "id", $_SESSION['id'] );
    if ( ! $benutzer_daten || $benutzer_daten[login] != $_SESSION['login'] || $benutzer_daten[passwort] != $_SESSION['passwort'] )
        	{
        	header( "Location: v2.php" );
        	exit;
        	}
		else
			{
    		return $benutzer_daten;
			}
    }
 
vermeide es, direkt mit Benutzername und Passwort umzugehen.

Speichere in der Session stattdessen lieber bspw. einen md5-hash aus Benutzername und Passwort, ....so kannst du immer noch eindeutig identifizieren, ohne aber mit den eigentlichen Logindaten umgehen zu müssen.

Das sicherste ist ohnehin, wenn du das Passwort überhaupt nirgends speicherst, sondern in der Benutzer-DB nur benannten Hash ablegst.
 
Gut werde ich anwenden, aber ich hab mal gelesen das md5 nicht so das tolle ist. Wenn schon dann sollte man Mcrypt verwenden, könnt Ihr dem zustimmen?
 
Wikipedia md5 Artikel hat gesagt.:
Sicherheitsüberlegungen

MD5 ist weit verbreitet und wurde ursprünglich als kryptografisch sicher angesehen. Bereits 1994 wurden von Bert den Boer und Antoon Bosselaers Pseudo-Kollisionen in MD5 entdeckt. Grundlegende Arbeit, um echte Kollisionen zu finden, wurde auch von Professor Hans Dobbertin (damals am BSI) geleistet, der bereits den erfolgreichen Angriff auf MD4 entwickelt hatte und die dabei verwendeten Techniken auf MD5 übertrug. Zwischenzeitlich war es ihm gelungen, eine in den Parametern modifizierte Version von MD5 zu brechen.
[Bearbeiten]

Die Brute-Force-Methode

Paul C. van Oorschot und Michael J. Wiener legten 1994 das Konzept eines Brute-Force-Angriffs auf MD5 vor, der mit Hilfe eines damals 10 Millionen US-Dollar teuren fiktiven Rechners durchgeführt werden sollte, der speziell auf diese Aufgabe ausgelegt war. Damit sollte es theoretisch möglich sein, innerhalb von 24 Tagen eine Kollision in MD5 zu finden. Im März 2004 startete das Projekt MD5CRK, das eine solche Kollision ohne Sonderinvestitionen finden wollte, indem man das Konzept des verteilten Rechnens ausnutzt. Obwohl eine Kollision ohne jede Kontrolle über die Ausgangsdaten zunächst wertlos erscheint, erhoffte man sich durch MD5CRK im Erfolgsfall auch psychologische Effekte auf Unternehmen, die sicherheitsrelevante Prozesse noch immer über MD5 absichern.

Neben dem obigen Angriff konnte Hans Dobbertin zeigen, dass die Kompressionsfunktion anfällig für Kollisionen ist. Diese Lücke konnte zunächst noch nicht ausgenutzt werden.
[Bearbeiten]

Die Analyse-Methode

Im August 2004 fand ein chinesisches Wissenschaftlerteam die erste Kollision in der vollständigen MD5-Funktion [1]. Auf einem IBM-P690-Cluster benötigte ihr erster Angriff eine Stunde, davon ausgehend ließen sich weitere Kollisionen innerhalb von maximal fünf Minuten finden. Der Angriff der chinesischen Forscher basierte auf Analysen. Kurz nach der Veröffentlichung der Arbeit der Chinesen wurde MD5CRK eingestellt.

Kollisionen finden heißt, man kennt ein M (Text) und sucht ein M' (Kollision), so dass hash(M) = hash(M'). Wenn man nur den Hashwert hat, ist es weiterhin schwierig, eine Kollision für den Hash zu finden.

Deswegen besteht keine akute Gefahr für Passwörter, die als MD5-Hash gespeichert wurden, diese Kollisionen sind eher eine Gefahr für digitale Signaturen.
http://de.wikipedia.org/wiki/Md5

Alternativen sind wie erwähnt mcrypt oder auch sha1().

Allerdings haben alle Methoden ihre Schwächen...
http://de.wikipedia.org/wiki/SHA1 Unten sind Links zu den Schwächen.

mcrypt benutzt standardmäßig Blowfish als Verschlüsselungsalgorithmus.

Allerdings solltest du unterscheiden zwischen Kryptalgorithmen und Hashwerten.
Mcrypt ist eine wirkliche Verschlüsselung, während md5() und sha1() nur den Hashwert eines Passwortes erstellen.
 
mCrypt ist eine echte Verschluesselung. Das heisst, dass es wieder entschluesselt werden kann. Das kann sowohl ein Vor- als auch ein Nachteil sein. Was bei mCrypt im Grunde das groesste Problem ist ist dass es wohl eher seltener bei den Hostern anzutreffen ist.
Hashes wie MD5 und SHA1 koennen nicht rueckgaengig gemacht werden, es kann lediglich eine Kollision hervorgerufen werden da verschiedene Strings gleiche Hashes ergeben koennen. Wenn mit einem Hash gearbeitet wird ist SHA1 auf jeden Fall die bessere Variante, da hier ein laengerer Hash-Wert erzeugt wird und somit die Chance einer Kollision geringer ist als bei MD5.
 
Habe mich nun für sha1() entschieden.

PHP:
function speichereSession( $id, $login, $passwort )
    {
	$hash_login = sha1($login);
	$hash_passwort = sha1($passwort);
	speichereHash( $id, $hash_login, $hash_passwort );
    $_SESSION['id'] = $id;
    $_SESSION['hash_login'] = $hash_login;
    $_SESSION['hash_passwort'] = $hash_passwort;
    }

PHP:
function ueberpruefeBenutzer()
    {
    $benutzer_daten = holeDaten( "benutzer", "id", $_SESSION['id'] );
    if ( ! $benutzer_daten || $benutzer_daten[hash_login] != $_SESSION['hash_login'] || $benutzer_daten[hash_passwort] != $_SESSION['hash_passwort'] )
        	{
        	header( "Location: v2.php" );
        	exit;
        	}
		else
			{
    		return $benutzer_daten;
			}
    }

Vielen Dank, an diese, die mir bei dieser Sache weiter geholfen haben.

Gibt es sonst noch irgendwellche Bedenken zur Sicherheit?
Oder schreibt einfach was ihr so darüber denkt, verschiedene Meinungen interessieren mich und sind meistens auch sehr Hilfreich:)
 
hmm....ich überprüfe beides, da ich die Überprüfungsart vom Script, des ersten Beitrags übernahm.

Aber eigentlich würde es auch nur mit einem Hash aus beidem gehen, so wie Sven Mintel es vorgeschlagen hat.
 
Um bei jedem Seitenaufruf sicher zustellen das man angemeldet ist.

Ich weis nicht genau was du hören willst, darum kann es sein das ich deine Frage wider nicht beantworten konnte.

Was ich mit dem ganzen vorhabe sieht man eigentlich im Script...
 
Zurück