Ich frage mich, ob ich das (maskierte) Passwortfeld in einem Formular erneut ausfüllen sollte, wenn andere Felder nicht validieren. Ich habe beide im Internet gesehen, wo das Formular entweder:
Was ist Ihre beste Praxis? Beweist das erneute Ausfüllen des Passwortfeldes eine Sicherheitslücke? Usability-weise würde ich es vorziehen, das Feld erneut zu füllen und den Benutzer nicht erneut eingeben zu lassen.
Eine Option, wenn Sie dies tun möchten, ist nicht das Senden des Passworts im Klartext, sondern ein zufälliges Token. Da es sich um ein Passwortfeld handelt, kann der Benutzer (außer für die Länge) nichts sagen. Speichern Sie dann das Hash-Kennwort und das Token in der Sitzung. Wenn der Benutzer das Formular abschickt, wenn das Passwortfeld mit dem gespeicherten Token identisch ist, verwenden Sie den gespeicherten Passwort-Hash. Ansonsten verwenden Sie das gesendete Passwort. Dies löst die Cache-Probleme (Da das zufällige Token in Anfragen von anderen Sitzungen keine Bedeutung hat). Auf diese Weise müssen Sie das rohe Passwort nach der ersten Formularübermittlung niemals speichern oder übertragen ...
Das erneute Befüllen ist für den Benutzer viel bequemer.
Wenn das Formular jedoch auf die klassische Art und Weise gesendet wird (d. h. mit einem vollständigen Neuladen der Seite, nicht über AJAX), riskieren Sie das HTML, das das zwischengespeicherte Passwort enthält. Mit richtigen Headern können Sie dieses Risiko jedoch verringern / entfernen. Die Verwendung von HTTPs ist auch in diesem Fall sehr wichtig. Es verhindert vollständig, dass HTTP-Proxies es zwischenspeichern, und der Cache des lokalen Browsers berücksichtigt normalerweise nocache-Header (und selbst wenn nicht, ist es kein großes Problem, wenn das Caching auf dem lokalen Rechner stattfindet).
Insgesamt möchte ich das Passwort normalerweise nicht mehr eingeben, nur weil ein anderes Feld (z. B. ein beschissenes Captcha) falsch war. In einer Hochsicherheitsumgebung möchten Sie das Passwortfeld jedoch nicht erneut ausfüllen es sei denn, Sie verwenden AJAX und müssen das eingegebene Passwort nicht wirklich zurücksenden.
Es ist ein Sicherheitsproblem auf gemeinsam genutzten Computern, da das Passwort bei der Anzeige der HTML-Quelle in Klartext angezeigt wird. Nicht nur in einem aktiven Browserfenster, sondern auch in jedem diskbasierten Cache.
Ich würde persönlich mit OpenID gehen, anstatt zu verlangen, dass der Benutzer noch einen Benutzernamen und ein Passwort-Paar erfindet (was sich auch auf die Benutzerfreundlichkeit auswirkt).
Wenn Sie das tatsächliche Passwort (oder etwas daraus abgeleitetes) vom Server an den Client senden müssen, um es erneut zu füllen, ist dies ein großes Sicherheitsloch.
Wenn Sie das Passwort nur lokal auf dem Client speichern, bis das Formular validiert ist (indem Sie die Seite nicht neu laden, zB über Javascript), dann scheint es mir in Ordnung.
Nein, es wird nicht (wenn richtig gemacht).
Cache-Control
, um zu verhindern, dass die Seite zwischengespeichert wird.