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-Key: 232614

Url: https://administrator.de/contentid/232614

Printed on: April 24, 2024 at 04:04 o'clock

Member: colinardo
Solution colinardo Mar 14, 2014, updated at Mar 17, 2014 at 09:42:40 (UTC)
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
Member: DerWoWusste
DerWoWusste Mar 14, 2014 at 10:53:39 (UTC)
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.
Member: colinardo
colinardo Mar 14, 2014 updated at 10:56:49 (UTC)
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
Member: DerWoWusste
DerWoWusste Mar 14, 2014 at 10:58:07 (UTC)
Goto Top
Werde meine Version eh nehmen, da die auch Tastaturmuster, Dictionary usw. zusätzlich prüft.
Vielen Dank für den Hinweis.
Member: DerWoWusste
DerWoWusste Mar 14, 2014 at 12:02:03 (UTC)
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,}$" }   
Member: DerWoWusste
DerWoWusste Mar 15, 2014 updated at 15:46:02 (UTC)
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.