Измеритель силы пароля [закрыт]
У меня есть ситуация, когда я хотел бы иметь возможность оценить пароль пользователей в веб-интерфейсе к моей системе, так что, прежде чем они нажмут отправить они знают, если у них есть плохой пароль.
Ключевые Требования:
- должен быть в состоянии оценить пароль, а не просто зачет/незачет.
- следует отключить форму, если пароль ниже порогового значения, поэтому пользователь не может отправить его.
- посмотреть приятно. :)
- не использовать jQuery - мы в настоящее время используя Mochikit и Y!UI в этой системе.
Я нашел много счетчиков паролей, написанных в jQuery, и такие вещи, как http://www.passwordmeter.com/ это слишком многословно.
может ли кто-нибудь предложить хорошее падение в javascript password rater, который я могу использовать, или дать пример того, как его написать?
3 ответа:
вот коллекция скриптов: http://webtecker.com/2008/03/26/collection-of-password-strength-scripts/
Я думаю, что оба они оценивают пароль и не используют jQuery... но я не знаю, есть ли у них встроенная поддержка для отключения формы?
обновление: создал JS скрипку здесь, чтобы увидеть его вживую:http://jsfiddle.net/HFMvX/
Я прошел через тонны поисков google и не нашел ничего удовлетворительного. мне нравится, как passpack сделали это так существенно реверсивный их подход, здесь мы идем:
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), } variationCount = 0; for (var check in variations) { variationCount += (variations[check] == true) ? 1 : 0; } score += (variationCount - 1) * 10; return parseInt(score); }
хорошие пароли начинают забивать около 60 или около того, вот функция, чтобы перевести это в слова:
function checkPassStrength(pass) { var score = scorePassword(pass); if (score > 80) return "strong"; if (score > 60) return "good"; if (score >= 30) return "weak"; return ""; }
вы можете настроить это немного, но я нашел это работает для меня хорошо
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
настройки Переключить на true или false, если вы хотите изменить то, что проверено на пароль
var m_strUpperCase = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var m_strLowerCase = "abcdefghijklmnopqrstuvwxyz"; var m_strNumber = "0123456789"; var m_strCharacters = "!@#$%^&*?_~" 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; }
Вы можете настроить самостоятельно в зависимости от ваших потребностей.