[TYPO3-german] felogin mit passwordCompareStrategy=rsa funktioniert nicht und speichert Passwort gesalted in der Datenbank

Webmeck - TYPO3 typo3 at webmeck.de
Tue Jun 19 17:05:28 CEST 2012


Hallo an alle,

ich hoffe ich mache nichts falsch, das hier ist mein erste Mail an eine 
Mailingliste.

Bei mir läuft:
TYPO3 4.7.1
mit felogin 4.7.1
und felogin_security 0.0.1

Ich möchte FE-Nutzer ausschließlich über das Backend anlegen können, das 
"funktioniert" auch. Wenn ich einen Testnutzer mit dem Passwort "hallo" 
im Backend anlege, steht in der Datenbank in der Passwortspalte 
"$1$OsjLcQFF$Zr3XF.HIGPZ8bG3sYLgy/."das scheint gesalted zu sein, denn 
es ändert sich auch bei jedem abspeichern. Aber ich finde das salt 
nicht. Wo könnte es sein? Hab nur eine tx_rsaauth_keys gefunden, dort 
ist aber nur ein Eintrag drin, ich habe aber zwei FE-User.

Außerdem habe ich, nach fehlgeschlagenem Login versucht, mal den Weg der 
Logindaten zu gehen und bin dann in der Datei t3lib_userAuth gelandet. 
Dort kommen die Logineingaben 1:1 an.

(abhängig von aktiviertem JavaScript RSA-Verschlüsselt oder nicht)

Mit JavaScript:
$loginData = array(
'status' => 'login',
'uname' => 'loginname',
'uident' => 
'rsa:RwAS+duvVaT/F+MHMUIlFVn9UpE+Q4AOLG7lcp/GD5Fbxncpl4CJPtMMIMCSkCzQL/xaTsmzhzppw5IUKB9ZRMXbGciYmUI6/3QFq5gasD6N/p9Jp1/ghK4y37OrteYnzJleZvASXvTDBhYpHrOIVe+j2RnJO66yzSz+wvLhoR0=',
'chalvalue' => '',
'permanent' => 0
)

Ohne JavaScript:
$loginData = array(
'status' => 'login',
'uname' => 'loginname',
'uident' => 'hallo',
'chalvalue' => '',
'permanent' => 0
)

nach einem Umweg über die class.tx_sv_authbase.php lande ich wieder in 
der class.t3lib_userauth.php in der methode compareUident().

function compareUident($user, $loginData, $passwordCompareStrategy = '') {

         $OK = FALSE;
         $passwordCompareStrategy = $passwordCompareStrategy ? 
$passwordCompareStrategy : $this->security_level;
t3lib_utility_debug::Debug($passwordCompareStrategy, 
'passwordcomparestrategy in class.t3lib_userauth');
t3lib_utility_debug::Debug($loginData, 'logindata in compareUident in 
class.t3lib_userauth');
t3lib_utility_debug::Debug($user, 'user in compareUident in 
class.t3lib_userauth');
         switch ($passwordCompareStrategy) {
             case 'superchallenged': // If superchallenged the password 
in the database ($user[$this->userident_column]) must be a md5-hash of 
the original password.
             case 'challenged':

                     // Check challenge stored in cookie:
                 if ($this->challengeStoredInCookie) {
                     session_start();
                     if ($_SESSION['login_challenge'] !== 
$loginData['chalvalue']) {
                         if ($this->writeDevLog) {
                             t3lib_div::devLog('PHP Session stored 
challenge "' . $_SESSION['login_challenge'] . '" and submitted challenge 
"' . $loginData['chalvalue'] . '" did not match, so authentication 
failed!', 't3lib_userAuth', 2);
                         }
                         $this->logoff();
                         return FALSE;
                     }
                 }

                 if ((string) $loginData['uident_' . 
$passwordCompareStrategy] === (string) md5($user[$this->username_column] 
. ':' . $user[$this->userident_column] . ':' . $loginData['chalvalue'])) {
                     $OK = TRUE;
                 }
             break;
             default: // normal
                 if ((string) $loginData['uident_text'] === (string) 
$user[$this->userident_column]) {
                     $OK = TRUE;
                 }
             break;
         }

         return $OK;
     }

Dort ist:
$passwordCompareStrategy = 'rsa' und somit rennt er in den default-modus 
wo er einfach das übermittelte Passwort (entweder rsa:... oder 'hallo') 
mit dem salted hash in der Datenbank abgleicht.

Da kann doch irgendwas nicht richtig sein. Also entweder habe ich das 
Dingen komplett vor die Wand gesetzt oder aber da ist ein Bug. Wäre für 
Hilfe sehr dankbar, sollte es ein Bug sein, könnte ich versuchen mich 
drum zu kümmern (loginData in einem Hook wieder aueinandernehmen und das 
aus der Datenbank auch, sodass er gerne in den Default: reinkann). Wie 
ihr aber vielleicht merkt bin ich nicht so erfahren.

Danke schonmal

LG Frederik


More information about the TYPO3-german mailing list