Passwort-Stärke-Messgerät [closed]

Lesezeit: 8 Minuten

Benutzer-Avatar
Jerub

Ich habe eine Situation, in der ich in der Lage sein möchte, das Passwort eines Benutzers in der Webschnittstelle zu meinem System zu bewerten, damit sie wissen, ob sie ein schlechtes Passwort haben, bevor sie auf „Senden“ klicken.

Schlüsselanforderungen:

  • Muss in der Lage sein, das Passwort zu bewerten, nicht nur bestanden/nicht bestanden.
  • Sollte das Formular deaktivieren, wenn das Passwort unter einem Schwellenwert liegt, damit der Benutzer es nicht absenden kann.
  • Schön aussehen. 🙂
  • Verwenden Sie jQuery nicht – wir verwenden derzeit Mochikit und Y!UI in diesem System.

Ich habe viele Passwortzähler gefunden, die in jQuery geschrieben sind, und Dinge wie http://www.passwordmeter.com/ das ist zu ausführlich.

Kann jemand einen guten Javascript-Passwort-Rater vorschlagen, den ich verwenden kann, oder ein Beispiel geben, wie man einen schreibt?

  • Schauen Sie sich an github.com/dropbox/zxcvbn

    – jcuenod

    5. August 2016 um 14:55 Uhr

  • So macht es keepass in C# github.com/dlech/KeePass2.x/blob/…

    – Nu Everest

    19. März 2017 um 4:02 Uhr

  • “Geschlossen da nicht konstruktiv”? Ich fand das wirklich sehr konstruktiv. Mehr als 58.000 Mal angesehen, bester Google-Rang usw. Kommt schon Leute…

    – 3 Dom

    30. Juni 2017 um 6:13 Uhr

  • Wenn Sie ein Passwortstärkemessgerät verwenden, stellen Sie sicher, dass Sie es mit einer grundlegenden Plausibilitätsprüfung testen. V4cc!nat!0n#3 ist ein schrecklich schwaches Passwort (weniger als eine Stunde geknackt)während monitor coke cursor fat ist außerordentlich stark (in 146.000 Jahrhunderten geknackt). Stellen Sie sicher, dass der von Ihnen verwendete Passwortprüfer gültige Ergebnisse liefert (dh Komplexitätsanforderungen machen Passwörter schwächer, nicht stärker)

    – Ian Boyd

    23. März 2018 um 16:56 Uhr


Benutzer-Avatar
tm_lv

Aktualisieren: hat hier eine js-Geige erstellt, um es live zu sehen: http://jsfiddle.net/HFMvX/

Ich habe jede Menge Google-Suchanfragen durchlaufen und nichts Befriedigendes gefunden. Mir gefällt, wie passpack es gemacht hat, also haben sie ihren Ansatz im Wesentlichen rückentwickelt, los geht’s:

function scorePassword(pass) {
    var score = 0;
    if (!pass)
        return score;

    // award every unique letter until 5 repetitions
    var letters = new Object();
    for (var i=0; i<pass.length; i++) {
        letters[pass[i]] = (letters[pass[i]] || 0) + 1;
        score += 5.0 / letters[pass[i]];
    }

    // bonus points for mixing it up
    var variations = {
        digits: /\d/.test(pass),
        lower: /[a-z]/.test(pass),
        upper: /[A-Z]/.test(pass),
        nonWords: /\W/.test(pass),
    }

    var variationCount = 0;
    for (var check in variations) {
        variationCount += (variations[check] == true) ? 1 : 0;
    }
    score += (variationCount - 1) * 10;

    return parseInt(score);
}

Gute Passwörter erreichen ungefähr 60 Punkte. Hier ist eine Funktion, um das in Worte zu fassen:

function checkPassStrength(pass) {
    var score = scorePassword(pass);
    if (score > 80)
        return "strong";
    if (score > 60)
        return "good";
    if (score >= 30)
        return "weak";

    return "";
}

Vielleicht möchten Sie dies ein wenig optimieren, aber ich fand, dass es für mich gut funktioniert

  • +1, weil diese Methode die Passwörter auf die gleiche Weise bewertet zxcvbn tut, aber mit viel weniger Code: [email protected]! => 70 Punkte = gut, Tr0ub4dour&3 => Punkte 80 = stark, correcthorsebatterystaple => Punkte 86 = stark.

    – Julien Kronegg

    6. März 2013 um 7:12 Uhr


  • Ich habe diese Funktion in PHP umgeschrieben, um auch die Punktzahl auf dem Server zu überprüfen: pastie.org/8889985

    – MacroMan

    7. März 2014 um 15:28 Uhr

  • Anschauen grc.com/haystack.htm Wie @Ziggy und das Experimentieren darauf hinweisen, besteht die große Schwäche dieser Lösung darin, dass Passwörter mit einer Länge von weniger als 8 schwach oder gut sind, wenn sie viel zu klein sind. Hinzufügen der folgenden an der Spitze von checkPassStrength(pass) stopft die Schwäche if( pass.length < 8 ) { return "poor"; } Das ermutigt die Leute, etwas lange genug mit gemischten Charakteren zu verwenden, das je nach Länge schwach, gut oder stark sein wird. alles andere ist wirklich arm.

    – simbo1905

    1. Januar 2015 um 17:59 Uhr


  • Das ist genau der Ausschnitt, den ich gesucht habe. Schnipsel wie diese helfen wenn Sie bereits mit dem Design fertig sind und suchen nur nach einem Algorithmus-Plugin. Bearbeiten: Habe gerade herausgefunden, dass Sie beim Kommentieren nicht sowohl Fett- als auch Kursivschrift für denselben Text verwenden können!

    – mccbala

    7. Mai 2015 um 6:48 Uhr


  • Kleines Problem: das abcdefghijklmnopqrstuvwxyz erhält eine Punktzahl von 130. Es sollte nach Mustern usw. suchen, die einem Hacker einfallen würden.

    – yainspan

    5. Oktober 2016 um 19:24 Uhr

Benutzer-Avatar
Schaschi

Password Strength Algorithm:

Password Length:
    5 Points: Less than 4 characters
    10 Points: 5 to 7 characters
    25 Points: 8 or more

Letters:
    0 Points: No letters
    10 Points: Letters are all lower case
    20 Points: Letters are upper case and lower case

Numbers:
    0 Points: No numbers
    10 Points: 1 number
    20 Points: 3 or more numbers

Characters:
    0 Points: No characters
    10 Points: 1 character
    25 Points: More than 1 character

Bonus:
    2 Points: Letters and numbers
    3 Points: Letters, numbers, and characters
    5 Points: Mixed case letters, numbers, and characters

Password Text Range:

    >= 90: Very Secure
    >= 80: Secure
    >= 70: Very Strong
    >= 60: Strong
    >= 50: Average
    >= 25: Weak
    >= 0: Very Weak

Einstellungen Schalten Sie auf true oder false um, wenn Sie ändern möchten, was im Passwort überprüft wird

var m_strUpperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var m_strLowerCase = "abcdefghijklmnopqrstuvwxyz";
var m_strNumber = "0123456789";
var m_strCharacters = "[email protected]#$%^&*?_~"

Check password


function checkPassword(strPassword)
{
    // Reset combination count
    var nScore = 0;

    // Password length
    // -- Less than 4 characters
    if (strPassword.length < 5)
    {
        nScore += 5;
    }
    // -- 5 to 7 characters
    else if (strPassword.length > 4 && strPassword.length < 8)
    {
        nScore += 10;
    }
    // -- 8 or more
    else if (strPassword.length > 7)
    {
        nScore += 25;
    }

    // Letters
    var nUpperCount = countContain(strPassword, m_strUpperCase);
    var nLowerCount = countContain(strPassword, m_strLowerCase);
    var nLowerUpperCount = nUpperCount + nLowerCount;
    // -- Letters are all lower case
    if (nUpperCount == 0 && nLowerCount != 0) 
    { 
        nScore += 10; 
    }
    // -- Letters are upper case and lower case
    else if (nUpperCount != 0 && nLowerCount != 0) 
    { 
        nScore += 20; 
    }

    // Numbers
    var nNumberCount = countContain(strPassword, m_strNumber);
    // -- 1 number
    if (nNumberCount == 1)
    {
        nScore += 10;
    }
    // -- 3 or more numbers
    if (nNumberCount >= 3)
    {
        nScore += 20;
    }

    // Characters
    var nCharacterCount = countContain(strPassword, m_strCharacters);
    // -- 1 character
    if (nCharacterCount == 1)
    {
        nScore += 10;
    }   
    // -- More than 1 character
    if (nCharacterCount > 1)
    {
        nScore += 25;
    }

    // Bonus
    // -- Letters and numbers
    if (nNumberCount != 0 && nLowerUpperCount != 0)
    {
        nScore += 2;
    }
    // -- Letters, numbers, and characters
    if (nNumberCount != 0 && nLowerUpperCount != 0 && nCharacterCount != 0)
    {
        nScore += 3;
    }
    // -- Mixed case letters, numbers, and characters
    if (nNumberCount != 0 && nUpperCount != 0 && nLowerCount != 0 && nCharacterCount != 0)
    {
        nScore += 5;
    }


    return nScore;
}

// Runs password through check and then updates GUI 


function runPassword(strPassword, strFieldID) 
{
    // Check password
    var nScore = checkPassword(strPassword);


     // Get controls
        var ctlBar = document.getElementById(strFieldID + "_bar"); 
        var ctlText = document.getElementById(strFieldID + "_text");
        if (!ctlBar || !ctlText)
            return;

        // Set new width
        ctlBar.style.width = (nScore*1.25>100)?100:nScore*1.25 + "%";

    // Color and text
    // -- Very Secure
    /*if (nScore >= 90)
    {
        var strText = "Very Secure";
        var strColor = "#0ca908";
    }
    // -- Secure
    else if (nScore >= 80)
    {
        var strText = "Secure";
        vstrColor = "#7ff67c";
    }
    // -- Very Strong
    else 
    */
    if (nScore >= 80)
    {
        var strText = "Very Strong";
        var strColor = "#008000";
    }
    // -- Strong
    else if (nScore >= 60)
    {
        var strText = "Strong";
        var strColor = "#006000";
    }
    // -- Average
    else if (nScore >= 40)
    {
        var strText = "Average";
        var strColor = "#e3cb00";
    }
    // -- Weak
    else if (nScore >= 20)
    {
        var strText = "Weak";
        var strColor = "#Fe3d1a";
    }
    // -- Very Weak
    else
    {
        var strText = "Very Weak";
        var strColor = "#e71a1a";
    }

    if(strPassword.length == 0)
    {
    ctlBar.style.backgroundColor = "";
    ctlText.innerHTML =  "";
    }
else
    {
    ctlBar.style.backgroundColor = strColor;
    ctlText.innerHTML =  strText;
}
}

// Checks a string for a list of characters
function countContain(strPassword, strCheck)
{ 
    // Declare variables
    var nCount = 0;

    for (i = 0; i < strPassword.length; i++) 
    {
        if (strCheck.indexOf(strPassword.charAt(i)) > -1) 
        { 
                nCount++;
        } 
    } 

    return nCount; 
} 

Sie können selbst nach Ihren Anforderungen anpassen.

  • @garrow: Was ist falsch an dem Codierungsstil, außer dass er sich von deinem unterscheidet? (FTR, es ist auch nicht der Stil, den ich bevorzuge, aber na und?)

    – Lawrence Dol

    4. Juni 2009 um 6:35 Uhr

  • Was ist mit “2 Nummern” passiert? 🙂

    – Nikolaus Shanks

    10. April 2013 um 12:34 Uhr

  • Lassen Sie uns einen Testfall ausprobieren! Bills Passwort ist “123&$aA”, etwa 40 Bit Entropie laut Wikipedia. Ihr Algorithmus gibt ihm eine Punktzahl von 80. Alices Passwort ist “eriahrieudfklsvhnsreuilvnreuhgsldhhvf”, ungefähr 160 Bit oder Entropie. Ihr Algorithmus stuft es auf Platz 35 ein. Nur um es klar zu sagen, stecken Sie diese beiden Passwörter in grc.com/haystack.htm gibt uns 0,7 Sekunden, um gegen 74,72 Billionen Billionen Jahrhunderte zu knacken.

    – Ziggy

    23. Mai 2014 um 19:51 Uhr


  • Aber im Ernst. Sie sind überhaupt nicht besorgt, dass Ihre vielfach positiv bewertete Antwort schwächere Passwörter gegenüber stärkeren vorschlägt? Die Leute werden das kopieren und einfügen!

    – Ziggy

    17. Juni 2014 um 22:52 Uhr

  • Alle anderen Optionen sind großartig, aber der wichtigste Faktor, der die Passwortstärke bestimmt, ist Länge. Dies sollte sich in der Note widerspiegeln. Wie auch immer, ich denke, es ist einfach für die Leute, dies anzupassen.

    – Stijn de Witt

    28. März 2016 um 20:23 Uhr

Benutzer-Avatar
kanamekun

Hier ist eine Sammlung von Skripten:
http://webtecker.com/2008/03/26/collection-of-password-strength-scripts/
(archivierter Link)

Ich denke, beide bewerten das Passwort und verwenden jQuery nicht … aber ich weiß nicht, ob sie native Unterstützung zum Deaktivieren des Formulars haben?

  • Denken Sie daran, auch wenn Sie das Formular in Javascript deaktivieren, sollten Sie diese Überprüfung auch auf der Serverseite durchführen. Schwierige Benutzer senden sowieso nur Formulare ab, oder was ist, wenn ein Benutzer Javascript deaktiviert hat?

    – Chris K

    4. Juni 2009 um 4:56 Uhr

  • Sie sollten auch beachten, dass Benutzer nur austricksen sich. Ich bin mir nicht sicher, ob Sie die Benutzer davor schützen müssen …

    – kräh

    18. April 2014 um 19:04 Uhr

  • Ich glaube, die von Ihnen verlinkte Seite wurde gehackt … LOL! die Ironie

    – KnF

    16. März 2015 um 23:03 Uhr

  • angegebener link funktioniert nicht..

    – Thamem

    10. Mai 2021 um 5:54 Uhr

1157660cookie-checkPasswort-Stärke-Messgerät [closed]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy