var kNoCanonicalCounterpart = 0;
var kCapitalLetter = 0;
var kSmallLetter = 1;
var kDigit = 2;
var kPunctuation = 3;
var kAlpha = 4;
var kCanonicalizeLettersOnly = true;
var kCananicalizeEverything = false;
var gSimilarityMap = new CSimilarityMap();
function CSimilarityMap(){
this.m_elements = "";
this.m_canonicalCounterparts = "";
}
function isctype(character, type){
var fResult = false;
switch(type){
case kCapitalLetter:
if((character >= 'A') && (character <= 'Z')){
fResult = true;
}
break;
case kSmallLetter:
if ((character >= 'a') && (character <= 'z')){
fResult = true;
}
break;
case kDigit:
if ((character >= '0') && (character <= '9')){
fResult = true;
}
break;
case kPunctuation:
if ("!@#$%^&*()_+-='\";:[{]}\|.>,</?`~".indexOf(character) >= 0){
fResult = true;
}
break;
case kAlpha:
if (isctype(character, kCapitalLetter) || isctype(character, kSmallLetter)){
fResult = true;
}
break;
default:
break;
}
return fResult;
}
function CharacterSetChecks(type, fResult){
this.type = type;
this.fResult = fResult;
}
function IsLongEnough(strWord, nAtLeastThisLong){
if ((strWord == null) || isNaN(nAtLeastThisLong)){
return false;
}
else if (strWord.length < nAtLeastThisLong){
return false;
}
return true;
}
function SpansEnoughCharacterSets(strWord, nAtLeastThisMany){
var nCharSets = 0;
var characterSetChecks = new Array(
new CharacterSetChecks(kCapitalLetter, false),
new CharacterSetChecks(kSmallLetter, false),
new CharacterSetChecks(kDigit, false),
new CharacterSetChecks(kPunctuation, false)
);
if ((strWord == null) || isNaN(nAtLeastThisMany)){
return false;
}
for(var index = 0; index < strWord.length; index++){
for(var nCharSet = 0; nCharSet < characterSetChecks.length;nCharSet++){
if (!characterSetChecks[nCharSet].fResult && isctype(strWord.charAt(index), characterSetChecks[nCharSet].type)){
characterSetChecks[nCharSet].fResult = true;
break;
}
}
}
for(var nCharSet = 0; nCharSet < characterSetChecks.length;nCharSet++){
if (characterSetChecks[nCharSet].fResult){
nCharSets++;
}
}
if (nCharSets < nAtLeastThisMany){
return false;
}
return true;
}
function ClientSideStrongPassword(){
return (IsLongEnough(ClientSideStrongPassword.arguments[0], "8") && SpansEnoughCharacterSets(ClientSideStrongPassword.arguments[0], "3"));
}
function ClientSideBestPassword(){
return (IsLongEnough(ClientSideBestPassword.arguments[0], "14") && SpansEnoughCharacterSets(ClientSideBestPassword.arguments[0], "3"));
}
function ClientSideMediumPassword(){
return (IsLongEnough(ClientSideMediumPassword.arguments[0], "8") && SpansEnoughCharacterSets(ClientSideMediumPassword.arguments[0], "2"));
}
function ClientSideWeakPassword(){
return (IsLongEnough(ClientSideWeakPassword.arguments[0], "1") || (!(IsLongEnough(ClientSideWeakPassword.arguments[0], "0"))));
}
function DispPwdStrength(iN,sHL){
if (iN>4) iN=4;
var message = new Array ();
message[0] = "Не известна";
message[1] = "Слабая";
message[2] = "Средняя";
message[3] = "Высокая";
message[4] = "Лучшая";
document.getElementById("password_strength").innerHTML = message[iN];
document.getElementById("password_strength").className = sHL;
}
function EvalPwdStrength(oF,sP){
if(ClientSideBestPassword(sP,gSimilarityMap)){
DispPwdStrength(4,'password_strength_good');
}
else if(ClientSideStrongPassword(sP,gSimilarityMap)){
DispPwdStrength(3,'password_strength_good');
}
else if(ClientSideMediumPassword(sP,gSimilarityMap)){
DispPwdStrength(2,'password_strength_bad');
}
else if(ClientSideWeakPassword(sP,gSimilarityMap)){
DispPwdStrength(1,'password_strength_bad');
}
else{
DispPwdStrength(0,'password_strength_neutral');
}
}
Проверка логина/пароля на простоту
Подкиньте пожалуйста идею проверки логина или пароля на простоту. В голову ничего путного не лезет. По каким алгоритмам определить что допустим пароль Vasya2007 простой, а nYtr7PpjfaK сложный?
1. Смена регистра менее 3 раз - пароль простой.
2. Отсутствие букв (или, наоборот, цифр) - пароль простой.
3. Цифры и буквы представляют собой 2-3 группы - пароль простой.
Можно и еще придумать что-нить.
Код:
юзается соответственно в виде:
Код:
onkeyup="EvalPwdStrength(document.forms[0], this.value);"
1) минимум 5-6 символов(тут в приницпе любое удовлетворяющие тебя число)
2) минимум 1 символ алфавита в верхнем регистре
3) минимум 1 символ алфавита в обычном регистре
4) минимум 1 цифра
можно поставить проверку на совпадение пароля(его буквеной части) со словами из словаря (из файла к примеру)
к примеру отсеивать такие части пароля как Vasya..... и Orion(orion)
5) + проверка на содержание в пароле информации пользователя
Логин, имя, фамилия и дата рождения (с выводом предупреждения что пароль небезопасный если это необходимо)
а лучше генерить пароли и не давать пользователю их менять :)
Цитата: elrevin
а лучше генерить пароли и не давать пользователю их менять :)
Думаю, RussianSpy рассматривал этот вариант и тем не менее, вопрос был задан конкретный. А ты отвечаешь не по существу.
Лично моя точка зрения ближе всего к Комаджу.
Еще можно делать проверку на сочетания типа 'гсгс' и 'сгсг', где с - согласная, г - гласная. Например lola, voda, anod.
Проверка по словарю, имхо, излишняя!! Там таких слов и не будет! Хотя такие пароли как раз простые и в данном случае недопустимые.
KiLLMeNoT. п.5 - тоже необходимая вещь!!
koltaviy, ни одна система предотвращения плохих паролей не даст 100% гарантии что этот пароль не будет подобран через словарь или простым подбором зная личные данные пользователя....генерация паролей исключает эту возможность...хотя у нее тоже есть свои минусы)
Всем спасибо.:)
вариант скрипта что я выложил ещё ни одного пароля не посчитал со степенью защиты "лучшая"=) только высокая)) так и не понял что он считает лучшей
Попробуй md5() скормить этому скрипту??? :D
Цитата: KiLLMeNoT
скрипт не просматривал но использую следующие критерии
1) минимум 5-6 символов(тут в приницпе любое удовлетворяющие тебя число)
2) минимум 1 символ алфавита в верхнем регистре
3) минимум 1 символ алфавита в обычном регистре
4) минимум 1 цифра
можно поставить проверку на совпадение пароля(его буквеной части) со словами из словаря (из файла к примеру)
к примеру отсеивать такие части пароля как Vasya..... и Orion(orion)
5) + проверка на содержание в пароле информации пользователя
Логин, имя, фамилия и дата рождения (с выводом предупреждения что пароль небезопасный если это необходимо)
1) минимум 5-6 символов(тут в приницпе любое удовлетворяющие тебя число)
2) минимум 1 символ алфавита в верхнем регистре
3) минимум 1 символ алфавита в обычном регистре
4) минимум 1 цифра
можно поставить проверку на совпадение пароля(его буквеной части) со словами из словаря (из файла к примеру)
к примеру отсеивать такие части пароля как Vasya..... и Orion(orion)
5) + проверка на содержание в пароле информации пользователя
Логин, имя, фамилия и дата рождения (с выводом предупреждения что пароль небезопасный если это необходимо)
В принципе неплохо но я бы добавил пункт 6
6) проверка на символы (+-*/_=:; ...), минимум один символ
мне кажеться что когда есть и символы то его сложнее поламать