ASP.net PasswordStrengthRegularExpression для предотвращения общих паролей как “11 111” или “123456”

Клиент попросил, чтобы я препятствовал тому, чтобы пользователи, ввели общие пароли, но разрешили им использовать только алфавитно-цифровые пароли.

Вы знаете, что регулярное выражение использует во встроенном PasswordStrengthRegularExpression опция?

Править: Я знаю, довольно неопределенно, и это, что я сказал клиенту. Определение - что-то как

  • Не позволяйте тот же символ больше это 3 раза подряд. (1111, 2222, и т.д.)
  • Не позволяйте возрастать или убывать тенденции (12345, abcde, 6543, и т.д.)
1
задан Eduardo Molteni 7 June 2010 в 21:47
поделиться

5 ответов

Это слишком многого требует от регекса. Вы можете достаточно легко решить проблему повторяющихся символов:

^(?:(.)(?!\1\1)){6,}$

Но единственный способ запретить прогон последовательных символов - это перечислить все возможности:

^(?:(?!123|234|345|456|567|678|789).)*$

... ad infinitum. Я думаю, лучшее, что можно сделать, это потребовать сложного сочетания типов символов - например, по крайней мере, по два из прописных букв, строчных букв и цифр:

^(?=(?:[^0-9]*[0-9]){2})
 (?=(?:[^A-Z]*[A-Z]){2})
 (?=(?:[^a-z]*[a-z]){2})
 (?:([A-Za-z0-9])(?!\1\1)){6,}$

Это заставит пользователей проявить немного творчества.

2
ответ дан 2 September 2019 в 23:59
поделиться

Вы можете утверждать минимальный уровень сложности; е. грамм. «хотя бы одна прописная буква, одна строчная буква, одна цифра, минимальная длина 6 символов, только буквенно-цифровые символы» можно записать как

 ^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])[A-Za-z0-9]{6,}$
0
ответ дан 2 September 2019 в 23:59
поделиться

try this:

passwordStrengthRegularExpression="^\S*([a-zA-Z0-9]{1,10})$"
-2
ответ дан 2 September 2019 в 23:59
поделиться

Как насчет этого?

passwordStrengthRegularExpression=" @\"(?=.{6,})(?=(.*\d){1,})(?=(.*\W){1,})"

Проверяет соответствие пароля следующим критериям:

  • Больше семи символов.
  • Содержит хотя бы одну цифру.
  • Содержит хотя бы один специальный (не алфавитно-цифровой) символ.

http://msdn.microsoft.com/en-us/library/system.web.security.membership.passwordstrengthregularexpression.aspx

1
ответ дан 2 September 2019 в 23:59
поделиться

Я не уверен, что регулярное выражение может справиться с этим требованием, но функция в любом случае может быть более читабельной. Что-то вроде следующего исключит все, что содержит три последовательных одинаковых символа или три последовательных символа, которые следуют по возрастающей или убывающей схеме 1 (буквы или цифры).

static bool IsPasswordRelativelyStrong(string input)
{
    for (int i = 2; i < input.Length; i++)
    {
        if (input[i] == input[i - 1] - 1 && input[i - 1] == input[i - 2] - 1)
            return false;
        else if (input[i] == input[i - 1] + 1 && input[i - 1] == input[i - 2] + 1)
            return false;
        else if (input[i] == input[i - 1] && input[i - 1] == input[i - 2])
            return false;
    }

    return true;
}

Таким образом, учитывая следующий массив

string[] passwords = { "123456", "abcde", "654321", "111223", "11223344" };

Пройдет только последний. Функция может быть расширена, чтобы учитывать, разрешены ли и/или требуются ли неалфавитно-цифровые символы и должен ли пароль превышать минимальную длину.

1
ответ дан 2 September 2019 в 23:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: