internal/pwpolicy: Validate ist eine schmale Regelschicht VOR dem bcrypt-Hashing aus IAM-02, kein eigenes Policy-Framework. Prueft Mindestlaenge, Zeichenklassen (Gross-/Kleinbuchstaben, Ziffern, Sonderzeichen je nach Policy) und eine eingebettete Sperrliste haeufig verwendeter Passwoerter (case-insensitive) — Akzeptanzkriterium 1 + 2. Store haelt die Richtlinie als eine Zeile je Tenant-Datenbank (Singleton, Modell C), DefaultPolicy() greift, solange kein Tenant eine eigene gesetzt hat. LoginAndCheckPolicy komponiert IAM-02s LoginService, OHNE ihn zu veraendern: der Login selbst schlaegt bei einem alten, nicht mehr konformen Passwort NICHT fehl (Akzeptanzkriterium 3 — kein rueckwirkendes Aussperren), die Funktion liefert zusaetzlich mustChangePassword=true. Die Pruefung ist nur im Login-Moment moeglich, da dort kurzzeitig das Klartext-Passwort vorliegt — der gespeicherte bcrypt-Hash laesst sich nicht rueckwirkend gegen eine neue Richtlinie pruefen. Pruefungen (ausgefuehrt auf root@192.168.1.131, go build/vet/test PASS): 1. Zu kurzes/zu einfaches Passwort bei Registrierung/Aenderung abgelehnt — TestValidate_RejectsTooShortOrSimple. PASS. 2. Passwort aus Sperrliste abgelehnt — TestValidate_RejectsBlocklistedPassword (inkl. Gross-/Kleinschreibung). PASS. 3. Bestehender Nutzer mit altem, nicht-konformem Passwort kann sich noch einloggen, wird aber zur Aenderung aufgefordert — TestLoginAndCheckPolicy_FlagsNonConformantExistingPassword: Login mit schwachem Altpasswort gelingt, mustChangePassword=true; mit konformem Passwort mustChangePassword=false. PASS. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
34 lines
805 B
Go
34 lines
805 B
Go
package pwpolicy
|
|
|
|
// commonPasswords ist eine kleine, eingebettete Sperrliste bekannt
|
|
// haeufig verwendeter/kompromittierter Passwoerter (Akzeptanzkriterium 2).
|
|
// Vergleich erfolgt case-insensitive (siehe Validate).
|
|
var commonPasswords = map[string]bool{
|
|
"123456": true,
|
|
"password": true,
|
|
"12345678": true,
|
|
"qwerty": true,
|
|
"123456789": true,
|
|
"12345": true,
|
|
"1234": true,
|
|
"111111": true,
|
|
"1234567": true,
|
|
"dragon": true,
|
|
"123123": true,
|
|
"baseball": true,
|
|
"iloveyou": true,
|
|
"trustno1": true,
|
|
"1234567890": true,
|
|
"sunshine": true,
|
|
"master": true,
|
|
"welcome": true,
|
|
"admin": true,
|
|
"letmein": true,
|
|
"login": true,
|
|
"passw0rd": true,
|
|
"starwars": true,
|
|
"abc123": true,
|
|
"password1": true,
|
|
"qwerty123": true,
|
|
}
|