Zum Inhalt springen

Festes Loginformular mit md5

Erstellt am 12. Juni 2008 · 3 Antworten · letzte Antwort am 22. August 2008

Tags: Frage

MWolf ·

Hallo Typo3-Gemeinde,

ich habe mir auf einer Seite ein Loginformular nach fem HowTo "Login-Design" von just2b erstellt (siehe hier: #27475 )

jetzt stehe ich vor dem Problem das durch die md5-Verschlüsselung dieses Loginformular keinen Login mehr zulässt.

Hier mein TS

# Login-BOX
[usergroup = *]
temp.10 = TEXT
#temp.10.data  = TSFE : id
temp.10.dataWrap (
<form action="{getIndpEnv:TYPO3_REQUEST_URL}" method="post">Angemeldet als: <!-- ###USERNAME### -->
               <div> <a href="profil.html">Mein
Profil</a> <span style="font-size: 0.8em;"><input class="logout" type="submit" value="Ausloggen" />
<input type="hidden" name="logintype" value="logout" /> </div></form>
)

#<b>#Ansonsten wird der [else] Zweig angezeigt</b>
[else]
temp.10 = TEXT
#temp.10.data  = TSFE : id
temp.10.dataWrap (

<form name="form" action="index.php?id=4" method="post">

<div><input name="user" class="login" type="text" id="user" title="Benutzername" value="" onfocus="if (this.value==this.defaultValue) this.value=''" size="12" />
<input name="pass" class="login" type="password" id="pass" title="Passwort" onfocus="if (this.value==this.defaultValue) this.value=''" value="" size="12" />
                       <input class="login" name="image" type="submit" value="Login" title="Login" />
<input type="hidden" name="redirect_url" value="{getIndpEnv:TYPO3_REQUEST_URL}" />      

                      <input type="hidden" name="logintype" value="login" /> <input type="hidden" name="pid" value="2" />
<br /><div>
<a href="login.html?tx_felogin_pi1%5Bforgot%5D=1&tx_newloginbox_pi1%5Bforgot%5D=1">Passwort vergessen?</a>
·  <a href="registrierung.html">Neu registrieren</a></div>     </div>         </form>

)
[global]
# / Login-BOX

Wo binde ich jetzt die md5-Verschlüsselung ein?
Mir wäre es ganz recht wenn man nicht irgendeine andere Extension oder ein anderes TS verwenden müsste.

Allerdings will keinerlei md5-Verschlüsselung laufen, auch nicht wenn ich das normale Loginformular aufrufe, was mich doch etwas stört, ich möchte nicht die Passwörter der User im Klartext sehen, weder in der Db noch im Backend.
Was kann man da noch tun, hab schon sämtliche Threads zu diesem them durch und nix will klappen

Danke schon vorab

MWolf

MWolf ·

Ok, mit ner wahrscheinlich recht schmutzigen lösung hab ich es nun zumindest hinbekommen, dass die Loginbox verschlüsselt.

Hier für alle nochmal mein Lösungsweg:

# Login-BOX
[usergroup = *]
temp.10 = TEXT
#temp.10.data  = TSFE : id
temp.10.dataWrap (
<form action="{getIndpEnv:TYPO3_REQUEST_URL}" method="post">Angemeldet als: <!--###USERNAME###-->
               <div> <a
href="profil.html">Mein
Profil</a>
·  <a href="passwort.html">Passwort ändern</a> <span style="font-size: 0.8em;"><input class="logout" type="submit" value="Logout" />
<input type="hidden" name="logintype" value="logout" /> </div></form>
)

#<b>#Ansonsten wird der [else] Zweig angezeigt</b>
[else]
temp.10 = TEXT
#temp.10.data  = TSFE : id
temp.10.dataWrap (

<form name="form" action="login.html" method="post" onsubmit="superchallenge_pass(this); return true;">

<div><input name="user" class="login" type="text" id="user" title="Benutzername" value="" onfocus="if (this.value==this.defaultValue) this.value=''" size="12" />
<input name="pass" class="login" type="password" id="pass" title="Passwort" onfocus="if (this.value==this.defaultValue) this.value=''" value="" size="12" />
                       <input class="login" name="image" type="submit" value="Login" title="Login" />
<input type="hidden" name="redirect_url" value="{getIndpEnv:TYPO3_REQUEST_URL}" />      

                      <input type="hidden" name="logintype" value="login" /> <input type="hidden" name="pid" value="2" />
<br /><div>
<a href="login.html?tx_felogin_pi1%5Bforgot%5D=1&tx_newloginbox_pi1%5Bforgot%5D=1">Passwort vergessen?</a>
·  <a href="registrierung.html">Neu registrieren</a></div>     </div> <input type="hidden" name="challenge" value="###KB_MD5FEPW_CHALLENGE###" />        </form>

)
[global]
# / Login-BOX

So sieht die Loginbox nun aus
Um die md5-Verschlüsselung aber nun hinzubekommen habe ich mich nach folgendem Post gerichtet (alt aber gut)

Ilahn schrieb

Hallo Daniel,

ich stand vor dem selben Problem und konnte es mit Hilfe des folgenden Threads lösen: #41526

Im folgenden mein Schrittweises vorgehen:

1. Ich benutze automaketemplate, weshalb ich alle Quelldateien im Ordner fileadmin abgespeichert habe. Dort kopiere ich auch die Datei md5.js (zu finden im Ordner typo3) hinein.

2. Das benötigte JavaScript in mein Template einfügen

<script type="text/javascript">
	/*<![CDATA[*/
<!--

function superchallenge_pass(form) {
                var pass = form.pass.value;
                if (pass) {
                        var enc_pass = MD5(pass);
                        var str = form.user.value+":"+enc_pass+":"+form.challenge.value;
                        form.pass.value = MD5(str);
                        return true;
                } else {
                        return false;
                }
        }
// -->
	/*]]>*/
</script>
<script language="JavaScript" type="text/javascript" src="md5.js"></script>

3. Damit diese händisch eingefügten JavaScripts nicht mit den automatisch generierten auf der Login-Seite kollidieren, kommentiere ich diese vorsichtshalber in der Datei class.tx_kbmd5fepw_newloginbox.php (typo3conf\ext\kb_md5fepw\pi1) aus.

//$GLOBALS['TSFE']->JSCode .= $js;
//$GLOBALS['TSFE']->additionalHeaderData['tx_kbmd5fepw_newloginbox'] = '<script language="JavaScript" type="text/javascript" src="typo3/md5.js"></script>';

4. Jetzt muss noch die Funktion zum Austausch des Challenge-Platzhalters eingefügt werden. Dies geschieht in der Datei ext_localconf.php (typo3conf\ext\kb_md5fepw). Dort einfach am Ende folgende Funktion einfügen:

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';
}

5. Schliesslich noch das bewährte TS mit dem zusätzlichen hidden-field und Challenge-Platzhalter

[usergroup = *]
temp.login = TEXT
temp.login.dataWrap (
<form action="{getIndpEnv:TYPO3_REQUEST_URL}" method="post">
<p>Sie sind angemeldet als Ilahn 
<input class="logout" type="submit" value="Logout" />
<input type="hidden" name="logintype" value="logout" />
</p>
</form>
)
[else]
temp.login = TEXT
temp.login.data  = TSFE : id
temp.login.dataWrap (

<form action="index.php?id=100" method="post" onsubmit="superchallenge_pass(this); return true;">
<input type="text" name="user" value="" />
<input type="password" name="pass" value="" />
<input type="submit" name="submit" value="Anmelden" />   
<input type="hidden" name="logintype" value="login" />
<input type="hidden" name="pid" value="99" />
<input type="hidden" name="redirect_url" value="{getIndpEnv:TYPO3_REQUEST_URL}" />
<input type="hidden" name="challenge" value="###KB_MD5FEPW_CHALLENGE###" />
</form>
)
[global]

Das sollte es dann tun 😉 Viel Erfolg!

Das Javascript habe ich einfach im Template vor den Marker der Loginbox gepackt, da ich es nicht geschafft hab das Javascript fest in den Header zu bekommen.

Nun stehe ich nur vor dem Problem, dass bei einer Passwortänderung mit fechangepassword das PW wieder im Klartext geschrieben wird und somit ein Login nicht möglich ist.

Wenn hierzu jemand einen Workarround hat immer her damit 😉

errox ·

... es fehlt nur noch eine Zeile!

in class.tx_fechangepassword_pi1.php:

'password' => $newpw

in

'password' => md5($newpw)

ändern!

🙂