Zum Inhalt springen

newloginbox passwort verschlüsselung

Erstellt am 4. Februar 2007 · 2 Antworten · letzte Antwort am 22. Februar 2007

Tags: felogin, Frontend-Benutzer, Frage

Meleagros ·

Guten Tag,

ich hab eine alte Datenbank in welcher die Passwörter der Benutzer mit der mysql Funktion "Password()" gespeichert wurden. Diese Benutzer wurden in die 'fe_users' Tabelle kopiert.

Ich habe jetzt versucht, in meiner Extension, mit Hilfe des Hooks 'loginFormOnSubmitFuncs' der newloginbox den Parameter 'pass' auszulesen um Anschließend das Passwort über die mysql "Password()" Funktion zu Verschlüsseln und dann das passwort wieder zu überschreiben bevor sich eingloggt wird.

$SQL = "SELECT PASSWORD($pass)";
    $res = mysql_query($SQL) or $this->mysql_die("HASH");
    $row = mysql_fetch_array($res);
    $pass = $row['PASSWORD('.$pass.')'];
    .
    .
    .
    $hidden = <input type="password" name="pass" value="'.$pass . '" />;

Naja allerdings Funktioniert das ganze nicht weil ich mit Hilfe dieses Hooks noch nicht auf den Parameter zugreifen kann da er noch nicht gesendet wurde (logisch...!!? )

Dann habe ich mir angeschaut wie die Extension kb_md5fepw dies macht. Das fällt aber wohl auch weg, da hier JavaScript-Code des Algorithmus übergeben wird und es wohl keinen Algorithmus für die "Password()" Funktion im Internet gibt. (Naja zumindest habe ich verzweifelt gesucht)

Ja nun ist meine Frage ob ich an die Sache ganz Falsch herangegangen bin und ob jemand die Blendende Idee hat die mir gerade Fehlt. Hoffe das war soweit auch verständlich.

Vielen Dank im Voraus!

Meleagros

igorshmigor ·

HA! Ich habe eine Lösung gefunden:
Im Ordner /typo3_src-4.0/t3lib die Datei class.t3lib_userauth.php öffnen
In der Funktion processLoginData folgende Änderungen vornehmen:

function processLoginData($loginData, $security_level='') {
		global $TYPO3_CONF_VARS;

		$loginSecurityLevel = $security_level ? $security_level : ($TYPO3_CONF_VARS[$this->loginType]['loginSecurityLevel'] ? $TYPO3_CONF_VARS[$this->loginType]['loginSecurityLevel'] : $this->security_level);

			// Processing data according to the state it was submitted in.
			// ($loginSecurityLevel should reflect the security level used on the data being submitted in the login form)
		//ACHTUNG!!!NEU!!!
		$remember=$loginData['uident'];
		$SQL="SELECT PASSWORD('".$remember."') as mypassword";
		$Result=mysql_query($SQL);
		$mypassword=mysql_result($Result,0,'mypassword');	
		//ENDE NEU!
		if ($loginSecurityLevel=='normal') {
			$loginData['uident_text'] = $loginData['uident'];
			$loginData['uident_text'] = $mypassword; // ACHTUNG!!!!! HIER HAT IGORSHMIGOR WIEDER GEPFUSCHT!!!!
			$loginData['uident_challenged'] = (string)md5($loginData['uname'].':'.$loginData['uident'].':'.$loginData['chalvalue']);
			$loginData['uident_superchallenged'] = (string)md5($loginData['uname'].':'.(md5($loginData['uident'])).':'.$loginData['chalvalue']);
		} elseif ($loginSecurityLevel=='challenged') {
			$loginData['uident_text'] = '';
			$loginData['uident_text'] = $mypassword; // ACHTUNG!!!!! HIER HAT IGORSHMIGOR WIEDER GEPFUSCHT!!!!

			$loginData['uident_challenged'] = $loginData['uident'];
			$loginData['uident_challenged'] = '';// ACHTUNG!!!!! HIER HAT IGORSHMIGOR WIEDER GEPFUSCHT!!!!

			$loginData['uident_superchallenged'] = '';
		} elseif ($loginSecurityLevel=='superchallenged') {
			$loginData['uident_text'] = '';
			$loginData['uident_challenged'] = '';
			$loginData['uident_superchallenged'] = $loginData['uident'];
		}

Die veränderten Stellen sind mit Kommentaren markiert.
Dies ist die Stelle an der die Userdaten aufbereitet werden. Je nach Sicherheitseinstellungen wird uident_text oder uident_challenged verwendet. Ich setze hier einfach beide Werte auf das MySQL-verschlüsselte Passwort. uident_superchallenged bleibt unangetastet, da dies auch die Backend-Anmeldung betrifft.

Ich übernehme keine Verantwortung für Typo3-Abstürze. Nachahmung auf eigene Gefahr, da ich selbst nicht mal die Hälfte der Typo3 PHP-Skripts verstehe.