Inhalte von Passwort-Feldern nicht wieder anzeigen

Das Passwort-Widget aus Django Newforms zeigt bei einer erneuten Ausgabe den Formulares den Inhalt wieder an. Das ist zum einen sicherheitskritisch: in einem ungünstigen Fall könnte ein Dritter die Daten des Formulares erkunden und das Passwort sehen (Der Wert eines Passwort-Feldes ist im HTML-Quelltext klar zu sehen), zum anderen soll der User sowieso beide Passwörter neu eingeben.

Als Beispiel dient dieses einfache Registrierungsformular:

class RegistrationForm(forms.Form):
    name = forms.CharField(label='Name')
    password = forms.CharField(label='Passwort', widget=forms.PasswordInput)
    password_confirm = forms.CharField(label='Passwort (Bestätigung)', widget=forms.PasswordInput)

    # Prüfe hier, ob überhaupt korrekte Passwörter eingegeben wurden
    # def clean_password(self):
    # ... bspw. auf mindestens 8 Zeichen prüfen, wovon mindestens 1 Ziffer dabei ist

    def clean(self):
        if self.cleaned_data.get('password') != self.cleaned_data.get('password_confirm'):
            raise forms.ValidationError('Die beiden Passwörter müssen identisch sein')
        return self.cleaned_data

Angenommen wir klicken einmal auf den Submit-Button so würde das Formular (da in unserem Fall die Passwörter nicht identisch sind) wieder angezeigt:

Das Passwort wird wieder angezeigt.

Das PasswordInput-Widget bietet aber eine (nicht dokumentierte?) Funktion, den Inhalt des Feldes nicht mehr, genauer gesagt: nie, anzeigen zu lassen. Füge dem Wigdet das Attribut render_value=False hinzu und das Passwort-Feld ist bei jedem Rendern des Formulares leer.

Beispiel:

class RegistrationForm(forms.Form):
    name = forms.CharField(label='Name')
    password = forms.CharField(label='Passwort', widget=forms.PasswordInput(render_value=False))
    password_confirm = forms.CharField(label='Passwort (Bestätigung)', widget=forms.PasswordInput(render_value=False))

    # ...

  • Bernhard March 19, 2008

    Ist schon erstaunlich, mit den Passwörter. Oftmals meldet man sich geheimnisvoll im Passwortfeld verdeckt an und bekommt dann per E-Mail eine Anmeldebestätigung mit dem ausgeschriebenen Passwort zugeschickt - schöne Sicherheit im Netz!


Comments closed

Sorry, new comments are no longer allowed for this entry.

Write me an email if you have feedback or any questions regarding this post. If you found this post useful and just want to say thank you then don't forget that I have an Amazon Wishlist. :-)


↑ to the elevators

© 2001—2010 Martin Mahner. This is an I ♥ Django Project.

Admin | Generated: Fri, 3 Sep 2010 01:46:43 +0200