Home - Impressum - E-Mail


2008-05-15

vBulletin: Login Form & AutoComplete

Click here for an English version of this article.

In einer vBulletin-Standardinstallation funktioniert AutoComplete mit Firefox, nicht aber mit dem MS Internet Explorer. Eine entsprechende Google-Suche liefert bislang wenig hilfreiches, dieser Artikel sollte Abhilfe schaffen.

Zunaechst laesst sich festhalten, dass die Schuld in diesem Fall nicht bei IE zu suchen ist. Alle Browser muessen beim Absenden eines Formulars auf irgendeine Weise pruefen, ob eine Benutzereingabe Daten enthaelt, die fuer eine Speicherung in der Passwortverwaltung geeignet sind - ueblicherweise also eine Benutzername/Passwort-Kombination. Der Unterschied zwischen IE und Firefox ist nun nicht die Pruefung an sich, sondern der Zeitpunkt, zu dem diese Pruefung durchgefuehrt wird.

Firefox prueft den Inhalt eines Passwort-Eingabefeldes unmittelbar nach Anklicken des Buttons zum Absenden des Formulars; im Falle von vBulletin also des "Log In"-Buttons. Wurde ein Passwort angegeben, fragt Firefox, ob dieses gespeichert werden soll. Nachdem der Benutzer diese Frage beantwortet hat, werden zunaechst noch etwaige JavaScripte ausgefuehrt und die eingegebenen Daten anschliessend per POST an den Webserver gesendet:

Firefox: Klick - Passwortmanager - JavaScript - HTTP-POST

Internet Explorer hingegen fuehrt JavaScripte aus, bevor die Benutzereingaben auf enthaltene Passwoerter geprueft werden:

Internet Explorer: Klick - JavaScript - Passwortmanager - HTTP-POST

In Verbindung mit vBulletin fuehrt diese abweichende Ablaufreihenfolge zu unterschiedlichen Ergebnissen. Das vBulletin-Login-Formular nutzt naemlich ein JavaScript (vbulletin_md5.js), um aus dem eingegebenen Passwort einen MD5-Hash zu erzeugen, damit dieses nicht in Klartext gesendet werden muss. Ist diese Umwandlung erfolgt, leert Zeile 319 das Passwortfeld:

input.value = '';

Da IE wie beschrieben erst nach Ausfuehrung der JavaScripte auf Passwoerter prueft, ist dieses zum Zeitpunkt der Pruefung bereits geloescht worden. Somit hat IE tatsaechlich keinen Grund mehr, dem Benutzer die Speicherung eines Passworts anzubieten.

Beheben laesst sich das Problem durch Auskommentieren der Zeile 319 in der Datei vbulletin_md5.js (die sich unter dem Pfad (vBulletin-Verzeichnis)/clientscript/vbulletin_md5.js befindet):

// input.value = '';


Hier sollte zuvor sichergestellt sein, dass es sich bei Zeile 319 auch tatsaechlich um die Zeile handelt, in welcher der Wert des Eingabefeldes auf einen leeren String gesetzt wird - schliesslich koennten die vBulletin-Entwickler in der Zwischenzeit Zeilen hinzugefuegt oder entfernt haben.

English version starts here.

If you are using a vBulletin you might have come here because your login form causes the AutoComplete dialog to show up within Firefox but not within MS Internet Explorer. Google proves you are not the first one with this problem, yet it fails to provide a solution or even a workaround. I'm trying to fill that void with this article.

First of all, this problem is not caused by IE (well, at least not entirely). All web browsers have to run a check on the user input before they can (offer to) store it in their password database. Both IE and Firefox are looking for a user name and a password. The difference is not how they do it, but when they do it.

The differing behavior is caused by the way IE and Firefox decide if the AutoComplete dialog should be displayed. Firefox checks if the password field is filled as soon as the user presses the "Log in" button. After the AutoComplete dialog is closed, Firefox executes JavaScript and sends the data to the web server. IE, however, processes JavaScripts first and checks the value of the password field after scripts were executed.

The vBulletin login form uses a JavaScript (vbulletin_md5.js) to generate an MD5 hash of the password, which is probably a security measure to prevent passwords from being sent in clear text. When this is done, line 319 clears the password field:

input.value = '';


By the time IE checks for an entered password, it has already been deleted and IE sees no reason to prompt for AutoComplete.

Commenting out line 319 in vbulletin_md5.js (which is located at (vBulletin directory)/clientscript/vbulletin_md5.js>) solves the problem:

// input.value = '';


Be sure to check if line 319 really is the line where the input field's value is set to an empty string - the vBulletin developers might have added or removed lines in the meantime.


Home - Impressum - E-Mail