enhancement
major
minor
defect
critical
major
minor
major
#30076
React-Oberfläche: Passwortänderung mit Bestätigungsmeldung und Prüfung vor der Identitätsabfrage; Schutz gegen Durchprobieren von Passwörtern und Einmalcodes
Kontext
In der React-Oberfläche ändert ein Nutzer sein eigenes Passwort in den persönlichen Einstellungen (Benutzermenü → Einstellungen → Sicherheit → "Passwort ändern"); vor der Änderung bestätigt er seine Identität mit dem aktuellen Passwort. Ein Administrator setzt in der Kontenverwaltung das Passwort eines anderen Kontos ("Passwort zurücksetzen").
Bisher
- schloss sich der Dialog nach einer erfolgreichen Änderung kommentarlos,
- wurde eine abweichende Wiederholung oder ein zu kurzes Passwort erst gemeldet, nachdem das aktuelle Passwort eingegeben war,
- wurde das Setzen des aktuell gültigen Passworts als erfolgreiche Änderung akzeptiert,
- konnten Passwörter an der React-Anmeldung und in der Identitätsabfrage sowie Einmalcodes (OTP) beliebig oft und ohne Verzögerung durchprobiert werden. Die klassische Anmeldung verzögert dagegen nach wiederholten Fehlversuchen.
Verhalten
Bestätigung. Nach einer erfolgreichen Änderung erscheint eine Meldung: "Ihr Passwort wurde geändert." bzw. beim Zurücksetzen durch den Administrator "Das Passwort von <Konto> wurde gesetzt." Beim erzwungenen Passwortwechsel während der Anmeldung (abgelaufenes Passwort) wird die Anmeldung wie bisher ohne Meldung fortgesetzt.
Prüfung vor der Identitätsabfrage. Abweichende Wiederholung, leeres Passwort und Verstöße gegen die Passwortrichtlinie (Länge, Zeichenklassen) werden gemeldet, bevor nach dem aktuellen Passwort gefragt wird. Ob das neue Passwort früher schon verwendet wurde, wird bewusst erst nach bestätigter Identität geprüft: die Antwort sagt etwas über die bisherigen Passwörter des Kontos aus und dürfte an einer unbeaufsichtigten Sitzung nicht ohne Identitätsnachweis abgefragt werden können.
Wiederverwendung. Das aktuell gültige Passwort zählt als bereits verwendet und wird wie ein Passwort aus dem Verlauf abgelehnt ("Password has been used before and may not be used again."), sofern eine Wiederholungssperre (repeat-cycle > 0) konfiguriert ist. Das gilt für die eigene Änderung, den erzwungenen Wechsel bei der Anmeldung und das Zurücksetzen durch den Administrator.
Schutz gegen Durchprobieren. Nach wiederholten Fehlversuchen werden weitere Versuche für eine wachsende Zeit abgelehnt, ohne geprüft zu werden ("Zu viele fehlgeschlagene Anmeldeversuche ... Bitte warten Sie N Sekunden ..."):
- React-Anmeldung und Identitätsabfrage zählen gemeinsam je Konto und Client-Adresse, zusammen mit der klassischen Anmeldung;
- der Einmalcode (Anmeldung mit zweitem Faktor und Einrichtung) zählt je Geheimnis wie in der klassischen Oberfläche.
Technisch
- change-password.view.xml / admin/access-control/reset-password.view.xml: <notify> nach der Änderung.
- Neue Aktion <check-password-change/> (CheckPasswordChangeAction) vor <verify-identity/>; sie teilt ihre Prüfungen mit ChangePasswordApplyAction, die sie für den erzwungenen Wechsel selbst ausführt. Konstanten LoginAction.NEW_PASSWORD_ATTR / NEW_PASSWORD_CONFIRM_ATTR.
- DBAuthenticationAccessDevice.setPassword() prüft den aktuellen Hash zusätzlich zum Verlauf.
- LoginFailuresModule: gemeinsame Brücke attempt() bzw. checkRetry() / recordAttempt() mit RetryDeniedException, Schlüssel accountKey() / secretKey(). Verwendet von LoginAction, VerifyOtpAction, VerifyIdentityAction sowie unverändert im Verhalten von LoginViewDialog und CheckOTPDialog.
- PasswordPromptDialogControl: der Prüfer liefert statt eines Wahrheitswerts die anzuzeigende Meldung (Verifier), damit die Wartezeit unter dem Feld erscheint. VerifyIdentityAction.createVerifier() heißt jetzt createPasswordCheck(), neu ist attemptKey().
- Englische Texte der beiden Wartemeldungen sprachlich korrigiert.