derwowusste
Goto Top

Suche Skript, welches Kennwortkomplexität prüfen kann

Moin Kollegen.

Ich möchte einem Skript ein Kennwort übergeben. Es soll jedoch vor der Weiterverarbeitung geprüft werden, ob es den folgenden Komplexitätsanforderungen genügt:

Zwingend enthalten: Groß-,Kleinbuchstaben, Sonderzeichen und Zahlen.
Länge: festzulegende Mindestlänge (meinetwegen 9)

Kennt jemand sowas in Skriptform für Windows?

Content-ID: 232614

Url: https://administrator.de/forum/suche-skript-welches-kennwortkomplexitaet-pruefen-kann-232614.html

Ausgedruckt am: 24.12.2024 um 02:12 Uhr

colinardo
Lösung colinardo 14.03.2014, aktualisiert am 17.03.2014 um 10:42:40 Uhr
Goto Top
Hi DWW,
könnte man so mit Powershell machen:
(Die Funktion gibt $true zurück wenn das Password den Anforderungen entspricht, und $false wenn nicht / Nicht erlaubte Passwörter oder eine Passwort-Ausnahmeliste lässt sich ebenfalls einbinden)
function Check-PasswordComplexity([string]$pwd){
    
    # Liste mit nicht erlaubten Passwörtern festlegen
    $notallowed = @('Password123#','#PassW0rd')  

    # Alternativ die Liste der nicht erlaubten Passwörter aus einer Datei laden (jedes Passwort in einer eigenen Zeile)
    # $notallowed = gc "C:\passwords.txt" 

    # Minimale Länge der Passwörter festlegen
    $minlength = 9

    if ($pwd.length -lt $minlength){
        write-host "Das Passwort hat nicht die erforderliche Mindestlänge" -ForegroundColor Red  
        return $false
    }
    if ($notallowed -contains $pwd){
        write-host "Password ist in der Liste der nicht erlaubten Passwörter!" -ForegroundColor Red  
        return $false
    }
  
    if ($pwd -cmatch "[a-zaöü]" -and $pwd -cmatch "[A-ZÖÄÜ]" -and $pwd -match "\d" -and $pwd -match "\W"){  
        write-host "Password entspricht den Anforderungen" -ForegroundColor Green  
        return $true
    }else{
        write-host "Das Password entspricht nicht den Komplexitätsanforderungen (GROSSBuchstaben, kleinBuchstaben und Sonderzeichen)" -ForegroundColor Red  
        return $false
    }
}
# Funktion mit Passwort aufrufen (WICHTIG: 'einfache' Anführungszeichen benutzen) 
Check-PasswordComplexity '12kjhhfeu3#664'  
Grüße Uwe
DerWoWusste
DerWoWusste 14.03.2014 um 11:53:39 Uhr
Goto Top
Hi Uwe,

das ging ja mal wieder fix wie nix. Ja, das sieht gut aus.
Habe parallel auch eine gute eigene Idee gehabt, die das in der Domäne bereits etablierte System nutzt (Anixis PPE), damit wird es noch netter face-smile

Also: gelöst.
colinardo
colinardo 14.03.2014 aktualisiert um 11:56:49 Uhr
Goto Top
Nur darauf achten das das Password in 'einfachen' Anführungszeichen an die Funktion übergeben wird, sonst gibt es Probleme wenn ein Dollarzeichen im Password vorkommt face-wink

Grüße Uwe
DerWoWusste
DerWoWusste 14.03.2014 um 11:58:07 Uhr
Goto Top
Werde meine Version eh nehmen, da die auch Tastaturmuster, Dictionary usw. zusätzlich prüft.
Vielen Dank für den Hinweis.
DerWoWusste
DerWoWusste 14.03.2014 um 13:02:03 Uhr
Goto Top
...und noch ein weiterer Codeschnipsel, den man nehmen könnte, hat sich angefunden:
while ($true){(Read-Host "Enter password") -cmatch "^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*\W)(?!.*\s).{9,}$" }   
DerWoWusste
DerWoWusste 15.03.2014 aktualisiert um 16:46:02 Uhr
Goto Top
Details zu meiner Lösung: sie setzt das Kommandozeilentool passwd.exe von Alexander Frink ein, welches leider nirgendwo mehr zum Download bereit steht, wer es braucht, kontaktiert mich einfach. passwd.exe ist das einzige Tool, das ich kenne, mit dem man via Kommandozeile sein Kennwort ändern kann, ohne Vollzugriff auf das Userobjekt zu haben
.
Also: einen Dummyuser erstellen und im Skript den User dessen Kennwort ändern lassen (welches bei uns ja Anixis PPE's Anforderungen genügen muss). Nur wenn es gelingt, wird dieses Kennwort weiter verarbeitet.