Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Проверка логина/пароля на простоту

13
12 февраля 2007 года
RussianSpy
3.0K / / 04.07.2006
Подкиньте пожалуйста идею проверки логина или пароля на простоту. В голову ничего путного не лезет. По каким алгоритмам определить что допустим пароль Vasya2007 простой, а nYtr7PpjfaK сложный?
308
12 февраля 2007 года
Комаджу
850 / / 26.07.2006
Ну, попробуй сочетать такие вещи:
1. Смена регистра менее 3 раз - пароль простой.
2. Отсутствие букв (или, наоборот, цифр) - пароль простой.
3. Цифры и буквы представляют собой 2-3 группы - пароль простой.

Можно и еще придумать что-нить.
271
12 февраля 2007 года
MrXaK
721 / / 31.12.2002
видел вот такой код, скину сюда полностью, как работает я сам не понял)) но и не пытался разобраться... javascript
Код:
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');
    }
}


юзается соответственно в виде:
 
Код:
&#111;&#110;keyup="EvalPwdStrength(document.forms[0], this.value);"
10K
13 февраля 2007 года
KiLLMeNoT
61 / / 06.09.2006
скрипт не просматривал но использую следующие критерии

1) минимум 5-6 символов(тут в приницпе любое удовлетворяющие тебя число)
2) минимум 1 символ алфавита в верхнем регистре
3) минимум 1 символ алфавита в обычном регистре
4) минимум 1 цифра

можно поставить проверку на совпадение пароля(его буквеной части) со словами из словаря (из файла к примеру)
к примеру отсеивать такие части пароля как Vasya..... и Orion(orion)

5) + проверка на содержание в пароле информации пользователя
Логин, имя, фамилия и дата рождения (с выводом предупреждения что пароль небезопасный если это необходимо)
9.7K
14 февраля 2007 года
elrevin
31 / / 14.04.2006
а лучше генерить пароли и не давать пользователю их менять :)
263
14 февраля 2007 года
koltaviy
816 / / 16.12.2004
Цитата: elrevin
а лучше генерить пароли и не давать пользователю их менять :)


Думаю, RussianSpy рассматривал этот вариант и тем не менее, вопрос был задан конкретный. А ты отвечаешь не по существу.
Лично моя точка зрения ближе всего к Комаджу.
Еще можно делать проверку на сочетания типа 'гсгс' и 'сгсг', где с - согласная, г - гласная. Например lola, voda, anod.
Проверка по словарю, имхо, излишняя!! Там таких слов и не будет! Хотя такие пароли как раз простые и в данном случае недопустимые.
KiLLMeNoT. п.5 - тоже необходимая вещь!!

16K
14 февраля 2007 года
WorM
33 / / 11.06.2006
один из способов проверки на надежность пароля из букв и цифр - удаление всех цифр и проверка оставшегося набора букв по словарю/личным данным пользователя(имя фамилия и тд)

koltaviy, ни одна система предотвращения плохих паролей не даст 100% гарантии что этот пароль не будет подобран через словарь или простым подбором зная личные данные пользователя....генерация паролей исключает эту возможность...хотя у нее тоже есть свои минусы)
13
14 февраля 2007 года
RussianSpy
3.0K / / 04.07.2006
Нет. Словарь исключен. Думаю буду использовать идеи товарища KiLLMeNoT с некоторыми моими дополнениями.
Всем спасибо.:)
271
14 февраля 2007 года
MrXaK
721 / / 31.12.2002
вариант скрипта что я выложил ещё ни одного пароля не посчитал со степенью защиты "лучшая"=) только высокая)) так и не понял что он считает лучшей
244
14 февраля 2007 года
UAS
2.0K / / 19.07.2006
Попробуй md5() скормить этому скрипту??? :D
10K
30 марта 2007 года
s-haman
64 / / 27.03.2007
Немного поздно но всетаки если ещё тема не исчерпана думаю может поможет мой ответ
Цитата: KiLLMeNoT
скрипт не просматривал но использую следующие критерии

1) минимум 5-6 символов(тут в приницпе любое удовлетворяющие тебя число)
2) минимум 1 символ алфавита в верхнем регистре
3) минимум 1 символ алфавита в обычном регистре
4) минимум 1 цифра

можно поставить проверку на совпадение пароля(его буквеной части) со словами из словаря (из файла к примеру)
к примеру отсеивать такие части пароля как Vasya..... и Orion(orion)

5) + проверка на содержание в пароле информации пользователя
Логин, имя, фамилия и дата рождения (с выводом предупреждения что пароль небезопасный если это необходимо)


В принципе неплохо но я бы добавил пункт 6
6) проверка на символы (+-*/_=:; ...), минимум один символ
мне кажеться что когда есть и символы то его сложнее поламать

Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог