2 Stimmen

Coldfusion RegEx, um die Stärke des Passworts zu überprüfen

Ich benutze das, um ein 'starkes' Passwort in ColdFusion 7 zu validieren.

if ( REFind("^(?=.*[A-Z])(?=.*[!@##$&*])(?=.*[0-9])(?=.*[a-z]).{6}$", myPassword, 1) EQ 0 )

Allerdings funktioniert es nicht. Kann mir jemand meinen Fehler aufzeigen?

Die Kriterien, die ich zu testen glaube sind:

  • 1 Großbuchstabe
  • 1 Kleinbuchstabe
  • 1 Zahl
  • 1 Sonderzeichen
  • mindestens 6 Zeichen

Fußnoten für Nicht-CF-Benutzer:

  • der doppelte Hash dient zur Escape des CF-Hash;
  • ColdFusion verwendet Jakarta ORO 2.0.6 als Regex-Engine

6voto

Peter Boughton Punkte 105921

Ok, nun die Kriterien, die du testen möchtest, sind schlecht.

Zum Beispiel erfüllt Pa$5word die Kriterien, ist aber keine gute Wahl, während mein Name |z NICHT Fr£d viel stärker ist, aber scheitert (keine Zahlen; verschiedene Symbole).

Idealerweise solltest du nach einem vorhandenen Passwortstärke-Checker suchen (obwohl ich keine Ahnung habe, ob es überhaupt gute gibt).

Wie auch immer, für eine einfache Lösung für das, was du gefragt hast, das genau erklärt, was überprüft wird, tu einfach:

Es gibt keinen Grund/Nutzen, alles in ein einziges Regex zu pressen.

0 Stimmen

Jedoch werde ich dich ein wenig kritisieren... Du erwähnst Pa$5word als eine 'schlechte' Auswahl, obwohl es den Kriterien entspricht - und du behauptest, dass die Kriterien von Anfang an schlecht sind. Pa$5word ist SIGNIFIKANT sicherer als 'password' als Zeichenfolge...

3 Stimmen

Und ein Haus aus Stöcken ist deutlich sicherer als ein Haus aus Stroh - aber keines hält einen wolf mit großen Lungen auf...

0 Stimmen

Erinnere dich daran, warum du das tust - du möchtest "sicher genug" oder "nicht sicher genug" sein. Du musst richtig identifizieren, auf welcher Seite der Linie ein Wert landet; relative Größe ist nicht bedeutend.

0voto

Adam Cameron Punkte 29320

Ein Grund, warum es möglicherweise nicht funktioniert, ist, dass Ihre Geschäftsregel "mindestens sechs Zeichen" beträgt, aber Ihr Regex genau sechs Zeichen erzwingt.

Außerdem wäre es hilfreich, wenn Sie angeben könnten, bei welchen Bedingungen es fehlschlägt. Meine oberflächlichen Tests deuten darauf hin, dass alles in Ordnung ist, abgesehen von dem oben erwähnten Vorbehalt. Wenn Sie Ihre Frage so verfeinern könnten, dass Sie darauf hinweisen, auf welche nicht-oberflächlichen Tests ich nicht komme, die fehlschlagen, wäre das hilfreich.

In der realen Welt würde ich auch erwarten, welche Satzzeichen Sie für gültig halten. Ihre Liste ist ein bisschen kurz. Aber das hat nichts mit Ihrem aktuellen Problem zu tun.

0 Stimmen

Adam - Vielen Dank, dass du ein Problem identifiziert hast, aber du hast keine Korrektur angeboten - was deinen Beitrag frustrierender als hilfreich macht - was das 'Element' betrifft, das fehlgeschlagen ist - offensichtlich weiß ich nicht, welches fehlgeschlagen ist ... sonst hätte ich diese Informationen eingeschlossen.

0 Stimmen

Entschuldigung, ich ging davon aus, dass Sie offensichtlich in der Lage waren, ein ziemlich komplexes Regex zu schreiben. Ich dachte, eine Beurteilung durch "einen zweiten Satz Augen" wäre angemessen, basierend darauf, was das Problem zu sein schien. Ich wollte Ihre Intelligenz nicht beleidigen, indem ich Ihnen alles vorkaute. Was das Versagen und was das Funktionieren betraf, meinte ich so etwas wie "aA1$aa funktioniert, aber aA1$aaa nicht" (usw.). Was ich mir vorstellen könnte, war Teil der Fehlersuche-Analyse, die Sie vor der Veröffentlichung durchgeführt hatten? Das meinte ich nur: solche Informationen sind hilfreich.

0 Stimmen

Roger das Adam, und ich wusste wahrscheinlich, was du gemeint hast - ich war nur schlecht gelaunt - entschuldigung.

0voto

Pritesh Patel Punkte 1950

Versuch es.

^(?=.[A-Z])(?=.[!@##\$&])(?=.[0-9])(?=.*[a-z]).{6,}$

Füge ein Komma nach sechs hinzu, da du mehr als 6 Zeichen erlauben möchtest und $ muss mit \$ escaped werden

Aktualisierung

Versuche unten, ^ und $ wurden aus dem obigen entfernt

(?=.[A-Z])(?=.[!@##$&])(?=.[0-9])(?=.*[a-z]).{6,}

1 Stimmen

Warum muss das $ in diesem Zusammenhang maskiert werden?

0 Stimmen

Pritesh - das hat NICHT funktioniert... obwohl ich wünschte, es hätte - es ist knapp.

0 Stimmen

$ braucht keine Escapierung, mein Fehler, danke Adam, dass du darauf hingewiesen hast. jpmyob versuche unten entfernt ^ und $. (?=.*[A-Z])(?=.*[!@##$&*])(?=.*[0-9])(?=.*[a-z]).{6,}

0voto

gordon Punkte 1122

Fwiw um die verschiedenen Zeichenfehler zu trennen:

 raRe=[["[a-z]","Kleinbuchstaben"],["[A-Z]","Großbuchstaben"],["[\W]","nicht-alphanumerisch"],["[\d]","numerisch"]];

  #idxRe#: refind(raRe[idxRe][1], myPassword):#refind(raRe[idxRe][1], myPassword)# myPassword:#myPassword#; re:#raRe[idxRe][1]#; 
  Ihr Passwort muss mindestens ein #raRe[idxRe][2]# Zeichen enthalten

Und natürlich, wenn >=6 auch erforderlich ist:

Ihr Passwort muss mindestens 6 Zeichen lang sein

0 Stimmen

Wie oben kommentiert wurde, sind [\d] und [\W] unnötig umständliche Wege, um \d und \W zu schreiben. Außerdem glaube ich nicht, dass die wörtliche Array-Notation in CF7 funktioniert hat - wurde sie nicht erst in CF8 hinzugefügt?

0 Stimmen

Ooooo. kaputt. Danke @Peter. CF7 war ziemlich dumm. elegante Antwort, die du gepostet hast, auch.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X