Zum Inhalt springen

Problem mit eigenem Login mit newloginbox und kb_md5fepw

Erstellt am 18. April 2006 · 2 Antworten · letzte Antwort am 25. April 2006

Tags: felogin, Frontend-Benutzer, Frage

kleiner ·

Wie man sieht habe ich meine FeUser Passwörter nun auch verschlüsselt und das Ergebnis ist, dass mein Login(Login über newloginbox geht) nun nicht mehr geht, da ich kein gültigen challenge bekomme.
Mein Login sieht folgendermasen aus:

#Login
[usergroup=*]
lib.Login = TEXT
lib.Login.data = TSFE:id
lib.Login.wrap (
<form action="index.php?id=14" method="post">
<div class="login2"><b>Angemeldet als:</b></div><br />
<div class="login1"><b>kleiner</b></div><br />
<div class="login1"><input type="submit" name="submit" value="Abmelden" /></div><br />
<div class="login1"><a href="index.php?15">Profil bearbeiten</a></div>
<input type="hidden" name="logintype" value="logout" />
<input type="hidden" name="pid" value="12" />
<input type="hidden" name="redirect_url" value="index.php?id=|" />
</form>
)
[else]
lib.Login = TEXT
lib.Login.data = TSFE:id
lib.Login.wrap (
<div class="login2"><b>Anmeldung:</b></div><br />
<form action="index.php?id=14" method="post" onsubmit="superchallenge_pass(this); return true;">
<div class="login2">Uid:</div><div class="login3"><input type="text" name="user" value="" size="12" /></div>
<div class="login2">Pwd:</div><div class="login3"><input type="password" name="pass" value="" size="12" /></div>
<div class="login1"><input type="submit" name="submit" value="Anmelden" /></div><br />
<div class="login1"><a href="index.php?id=14&no_cache=1&tx_newloginbox_pi1[forgot]=1">Passwort vergessen?</a></div>
<input type="hidden" name="logintype" value="login" />
<input type="hidden" name="pid" value="12" />
<input type="hidden" name="redirect_url" value="index.php?id=|" />
<input type="hidden" name="challange" value="###KB_MD5FEPW_CHALLENGE###" />
</form>
)
#Login Ende

Ich hab bei kb_md5fepw die Klasse tx_kbmd5fepw_procout mit der Methode:

function contentPostProc_output(&$params) {
        $feobj = &$params['pObj'];    
        $GLOBALS['TYPO3_DB']->exec_DELETEquery('tx_kbmd5fepw_challenge', '(tstamp+(60*30))<'.time());
        if (strpos($feobj->content, '###KB_MD5FEPW_CHALLENGE###') !== false) {
            $feobj->content = str_replace('###KB_MD5FEPW_CHALLENGE###', $chal = md5(time()), $feobj->content);
            $GLOBALS['TYPO3_DB']->exec_INSERTquery('tx_kbmd5fepw_challenge', array('challenge' => $chal, 'tstamp' => time()));
        }
    }

gefunden. Jedoch leider an der Anwendung bin ich gescheitert!
Gibt es die Möglichkeit diese Methoder über userFunc oder postUserFunc oder ... so in mein Template einzubauen damit sie mir das Label ###KB_MD5FEPW_CHALLENGE### korrekt ersetzt?

Thx

Martin

mamuesp ·
kleiner schrieb

Gibt es die Möglichkeit diese Methoder über userFunc oder postUserFunc oder ... so in mein Template einzubauen damit sie mir das Label ###KB_MD5FEPW_CHALLENGE### korrekt ersetzt?

Hallo Martin!

Ich habe mir einen Hack gebastelt - bin mit dem aber nicht so ganz zufrieden. Denn folgendes habe ich gemacht:

1. Die JS-Routine, die das Passwort mit dem Challenge-Wert verknüpft, habe ich in ein JS-File ausgelagert und etwas angepaßt. Denn mich hat es gestört, dass das MD5-Ergebnis über das Formular-Feld "pass" übertragen wird - damit wird die Möglichkeit des Passwort-Merkens der Browser ausgehebelt (kann natürlich erwünscht sein). Es läuft jetzt so: das sichtbare Feld heißt "password", "pass" hingegen ist "hidden". DIe JS-Routine liest nun "password" aus, vermauschelt challenge mit Usernamen und Passwort und packt das Ganze dann in "pass". So klappt's auch mit dem Browser ...

2. Der Challene-Wert muss sich in der Tabelle "tx_kbmd5fepw_challenge" (oder so ähnlich) befinden, damit die Extension diesen auch akzeptiert. Bei jedem Zugriff wirft das Modul ältere Werte aus der Tabelle raus - somit können diese nur eine bestimmte Zeit benutzt werden. Ich habe es jetzt so gemacht, dass ich mir die Routine, die den Challenge-Wert erzeugt, aus den PHP-Klassen in eine eigene Klasse kopiert habe und nun über eine userFunc aufrufe. Per wrap wird das dann ins Formular gegossen - fertig.

Das Ganze klappt ganz gut, hat allerdings einen Haken:

- es muss JS als auch PHP-Code kopiert werden, was zu einer Abweichung bei neuen Versionen führen kann.
- es sind mehrere Dateien (JS, PHP) zu pflegen
- es gibt zwei unterschiedliche Methoden, Challenges zu errechen (das muß sein, sonst gibt's unique constraint Fehler, wenn man z.B. das eigene Formular mit der Extension mal auf einer Seite aufruft).

Ich habe in den PHP-Sourcen aber auch die Funktion entdeckt, die den o.g. Marker aus dem Formular ersetzt. Da ich aber die Parametrisierung der userFuncs nicht kenne, konnte ich das in der Schnelle nicht umsetzen. Wenn mir einer erläutert, die ich die passenden Parameter einer Funktion übergebe, läst sich das wahrscheinlich höchst elegant lösen.

Denn in der Klasse "class.tx_kbmd5fepw_procout.php" befindet sich, wie Du oben schon erläutert hast, die Methode "contentPostProc_output(&$params)". Diese kümmert sich um das Holen und Eintragen des Challenge Wertes. Das ist aber nur die halbe Miete, das Eintragen des JS-Codes und dessen Aufruf muss man aber noch selbst machen.

Übrigens: die Methode "function loginFormOnSubmit(&$params, &$ref)" aus der Klasse "tx_kbmd5fepw_newloginbox" trägt auch den JS-Code in der Seite ein, erezugt den Challenge-Wert und liefert ein Array zurück, in dem sich das "hidden"-Feld mit diesem Wert und der "onSubmit"-Aufruf befindet. Da ich aber hier mit der Parametrisierung gar nicht klar kam, bräuchte ich hier mehr Info, was (und wie) diese Methode alles an Parametern benötigt.

So, ich hoffe für's erste, das hilft ein wenig ... bei Interesse kann ich meinen Hack auch "zum Nachmachen" beschreiben ...

Gruß, Manfred

kleiner ·

Also ich habs inzwischen auch gelöst und zwar wie folgt:

1. JS Code aus loginFormOnSubmit eingefügt

2. fogendes in ext_localconf.php der MD5 FE Password Extenstion eingefügt

if (TYPO3_MODE == 'FE') {
	$TYPO3_CONF_VARS['FE']['XCLASS']['tslib/class.tslib_content.php'] = t3lib_extMgm::extPath($_EXTKEY).'class.ux_tslib_content.php';
	require_once(t3lib_extMgm::extPath('kb_md5fepw').'class.tx_kbmd5fepw_procout.php');
	$TYPO3_CONF_VARS['SC_OPTIONS']['tslib/class.tslib_fe.php']['contentPostProc-output'][] = 'tx_kbmd5fepw_procout->contentPostProc_output';
}

3. Challenge Inputfeld eingefügt mit ###KB_MD5FEPW_CHALLENGE### Label.

Fazit: Es wird bei jedem Aufruf der Seite eine neuer Wert in die tx_kbmd5fepw_challenge Tabelle eingetragen und das Label wird auch ersetzt wenn die Extension New front end login box installiert ist. Also es funktioniert zwar nicht schön aber selten!