md5-Hash interpretations Problem?

Giovanni

Mitglied
Hallo zusammen,

also ich hab ein Problem bzw. kein wirkliches Problem, also ich hab ein Login geschrieben, der funktioniert ohne Probleme. Und dann werde ich weiter geleitet auf die andere php datei, auch das läuft ohne weiteres.

Doch nun habe ich ein Admin mit einbezogen, und ne weiter SESSION hinzugefügt um zu überprüfen ob es ein Admin ist oder nicht, die ganzen Login Daten beziehe ich aus einer Datenbank.

So das problem liegt jetzt regel recht dass der md5() befehl irgendwie nicht so richtig klappt...
So ich setze in die Session die ganzen Informationen wie man sieht, zum einem die Sachen die man eingibt beim Login und dann noch benutzer definiertes...

[login.php]
PHP:
$all = md5($REMOTE_ADDR.$_SERVER['HTTP_USER_AGENT']);  // IP, Browser, Betriebsystem
$_SESSION['all'] = $all;
$_SESSION['login_id'] = $login_id;
$_SESSION['login_passwort'] = md5($login_passwort);
$_SESSION['admin'] = md5($login_id.$_SESSION['userpw'].$all);
die Zeile $_SESSION['admin'] ist die wichtige

Nun und hier ist die Abfrage der
[admin.php]
PHP:
session_start();
	
if(!isset($_SESSION['all]) && !isset($_SESSION['admin'])) {
	// Abbruch
	die("Unerlaubter Zugriff");
} 
else {
	$all = md5($REMOTE_ADDR.$_SERVER['HTTP_USER_AGENT']);  // IP, Browser, Betriebsystem (all)
	$admin = md5($_SESSION['login_id'].$_SESSION['login_passwort'].$all);
	if($_SESSION['all'] != $all && $_SESSION['admin'] == $admin) {
		// Abbruch
		die("Sie verfügen über keine Rechte in diesem Bereich");
	} 
	else {
		require "config.php";

		define("ACCESS", true);

		echo "<pre>";
		print_r($_SESSION);
		echo "</pre>";
	}
}

Das lustige ist, das Funktioniert auch, doch der hacken ist ich verstehe nicht warum das Funktioniert, denn das dürfte eigentlich nicht funktionieren.
Denn wenn man sich die Zeile von der Login anschaut und die wichtige Zeile in der admin.php
PHP:
[login.php]
$_SESSION['admin'] = md5($login_id.$_SESSION['userpw'].$all);

[admin.php]
$admin = md5($_SESSION['userid'].$_SESSION['userpw'].$all);

müsste eigentlich Sie verfügen über keine Rechte in diesem Bereich erscheinen und nicht die ausgabe der kompletten $_SESSION per print_r.

Könnt ihr mir da irgendwie helfen, das ich verstehe wieso es trotzdem funktioniert?
Danke
Giovanni
 
Also Passwörter in der Session zu Speichern halte ich eher für ein Sicherheits risiko als es nutzen bringt!

Zu dem hast du einen kleinen Fehler in der IF abfrage drin

PHP:
session_start(); 
     
if(!isset($_SESSION['all']) && !isset($_SESSION['admin'])) { 
    // Abbruch 
    die("Unerlaubter Zugriff"); 
}  
else { 
    $all = md5($REMOTE_ADDR.$_SERVER['HTTP_USER_AGENT']);  // IP, Browser, Betriebsystem (all) 
    $admin = md5($_SESSION['login_id'].$_SESSION['login_passwort'].$all); 
    if($_SESSION['all'] != $all && $_SESSION['admin'] == $admin) { 
        // Abbruch 
        die("Sie verfügen über keine Rechte in diesem Bereich"); 
    }  
    else { 
        require "config.php"; 

        define("ACCESS", true); 

        echo "<pre>"; 
        print_r($_SESSION); 
        echo "</pre>"; 
    } 
}


Mfg Splasch
 
Das grundlegende Problem ist, dass bei der derzeitigen Algorithmus jeder Benutzer als Administrator gilt, da es ja auch keine Unterscheidung gibt.
 
Ein Sicherheitsrisiko das passwort in der Session zu speichern ist es nicht wirklich,
da ich das Passwort per md5-Hash in die Session speicher, deswegen ist das risikio um einiges geringer. Klar kann man den md5-Hash per Bruteforce knacken, doch dies dauert sehr lange wenn das Passwort sicher genug ist. Z.B.: bei 8 Zeichen, mit 2 Zahlen 2 sondern ezichen und groß und klein schreibung braucht eine Bruteforce attacke auf den md5-Hash Jahre.

So den fehler in der IF abfrage habe ich gefunden, danke, aber das behebt immernoch nicht mein Problem, bzw verstehe ich nicht wieso der md5-Hash gleich ist von
bzw die $_SESSION['admin'] == $admin ist? Dass das true ist.... ich verstehe das nicht,
denn das dürfte eigentlich nicht, denn wie man in der login.php sieht ist dies
PHP:
[login.php zeile]
$_SESSION['admin'] = md5($login_id.$login_passwort.$all);
und in der $admin variable wird dies gespeichert und mit der $_SESSION['admin'] verglichen
PHP:
[admin.php zeile]
$admin = md5($_SESSION['userid'].$_SESSION['userpw'].$all);

dies dürfte ja nicht laufen, aber es läuft trotzdem oO

Und der Algorithmus stimmt, denn man wird per login.php ja nicht auf die admin.php weitergeleitet sondern auf die intern.php wenn man kein Admin ist, laut der Datenbank.
 
Wenn in beiden Berechnungen identische Eingabewerte verarbeitet werden, sind auch die Ausgabewerte identisch.
 
Also wenn du wie angibst die Passwörter gleich md5 zu hashen dann frag ich micht was in $_SESSION['userpw'] drin Steht?

Entwerder du hast 2 mal einen md5 wert. Dann ist klar warum das nie übereinstimmen kann oder du hast in $_SESSION['userpw'] das Passwort in klartext stehen.

Zudem sehe ich nicht wirklich einen Sin in deinen Zuweisungen!

Mfg Splasch
 
ja bloß in beiden berechnung ist es nur identisch,

wenn die $_SESSION['admin] so abgespeichert wird in der Session
PHP:
$_SESSION['admin'] = md5($login_id.md5($login_passwort).$all);
somit stimmt dann die Session mit der $admin variable und die schleife gibt true/bzw false in meiner schleife.

wenn die $_SESSION['admin'] so abgespeichert wird,
PHP:
$_SESSION['admin'] = md5($login_id.$login_passwort.$all);

somit is dies nicht mehr identisch mit der $admin variable und die IF-Abfrage müsste true ausgeben somit die die("Sie verfügen..."); Tut es aber leider nicht sondern erfüllt angeblich auch die Kriterien, ich habe mal die $admin und die $_SESSION['admin']; untereinander ausgeben und die sind immer identisch zueinander, was unmöglich sein kann.
Dies ist mein problem das genau nachvoll zu ziehn, vllt habe ich auch nur ein denk fehler und übersehe was, aber das kann doch nicht möglich sein so oder?

$_SESSION['login_passwort] das gespeichert ist
PHP:
$_SESSION['login_passwort] = md5($login_passwort);

dies is ja die If anweisung, fehler wurde behoben mit dem ==
PHP:
$admin = md5($_SESSION['login_id'].$_SESSION['login_passwort].$all);
if($_SESSION['all'] != $all && $_SESSION['admin'] != $admin) {
	// Abbruch
	die("Sie verfügen über keine Rechte in diesem Bereich");
} 
else {
	echo "juhuu Intern";
}
 
Zuletzt bearbeitet:
Sei mir net böse aber was du da machst ist schwachsin!

Zudem vergisst du immer die ' Zeichen bei deinen Abfragen.

1.) Bei deinen Abfragen wird weder unterschieden obs ein Admin oder User ist

2.) Werden deinen Passwörter in Klartext abgelegt um nur mal auf Thema Sicherheit zu verweisen. Ein nachträgliches hashen ändert nix daran das dein Pw in Klartext in der Session steht.

3.) Durch mehrmaliges md5 hashen erreicht man nur eine Stärker Server auslastung.

4.) Wird $_SESSION['all'] != $all immer false sein da werte immer gleich sind sinloser vergleich
($all = md5($REMOTE_ADDR.$_SERVER['HTTP_USER_AGENT']);
$_SESSION['all'] = $all; )


Mfg Splasch
 
Sei mir net böse aber was du da machst ist schwachsin!

Zudem vergisst du immer die ' Zeichen bei deinen Abfragen.

1.) Bei deinen Abfragen wird weder unterschieden obs ein Admin oder User ist

2.) Werden deinen Passwörter in Klartext abgelegt um nur mal auf Thema Sicherheit zu verweisen. Ein nachträgliches hashen ändert nix daran das dein Pw in Klartext in der Session steht.

3.) Durch mehrmaliges md5 hashen erreicht man nur eine Stärker Server auslastung.

4.) Wird $_SESSION['all'] != $all immer false sein da werte immer gleich sind sinloser vergleich
($all = md5($REMOTE_ADDR.$_SERVER['HTTP_USER_AGENT']);
$_SESSION['all'] = $all; )


Mfg Splasch

Zu 1:Ob der User Admin oder User ist, brauch ich nicht weil die weiterleitung in der Login.php immer auf eine andere Datei verweißt, ob der User, Admin oder User ist, wird in der Login.php verglichen und somit die weiterleitung auf die User-Intern Seite weitergeleitet oder beim Admin dann halt zur Admin-Intern Seite

Zu 2: wie du siehst wird das Passwort NICHT in Klartext gespeichert sonder als md5-Hash gespeichert!

Zu 4: Dies ist keine Sinnlose abfrage sondern deine Denkweise dieser Abfrage ist bloß fehlgeleitet, denn es gibt die Möglichkeit Session's zu klauen, frag mich nicht wie aber es geht! So da wir dann die IP Adresse neu setzen wie auch die Browser Version und Art somit kann die nicht immer gleich sein! Zumindest nicht gleich wenn die Session geklaut bzw. ein anderer User von einem anderem PC drauf zugreift mit dieser Session.
 
Zurück