2013-09-11 6 views
-1

Условия: Пароли должны иметь не менее 8 символов, которые сочетают в себе использование как минимум 2 из следующих: буквы верхнего и нижнего регистра, цифры и специальные символы.Как выполнить проверку пароля с помощью регулярного выражения?

Какой шаблон может соответствовать условиям?

+0

Каковы фактические 'специальный characters'? –

+2

Вы не используете для этого регулярные выражения. – ThiefMaster

+2

Я лично считаю, что эта политика паролей сосет. «Специальные» символы легко для машин угадывать и очень сложно запоминать людям. [xkcd/936] (https://xkcd.com/936/) – naomik

ответ

0
string PASSWORD_PATTERN = "((?=.*\\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{8,20})"; 
string password = "[email protected]#"; 
Regex.IsMatch(password,PASSWORD_PATTERN); 

попробуйте это.

+1

В вашем решении отсутствует объяснение или демонстрация того, что он работает по назначению. – naomik

6

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

Однако, если пересмотреть то, что вы хотите сделать, это хорошая идея:

  • Ограничение символов является ужасно плохой идеей. Любой символ должен быть разрешен
  • Если пароль имеет определенную длину, требующую, например, символы/цифры/смешанный случай теряют большую часть своей цели. Кроме того, злоумышленник не может знать, использует ли какой-либо пользователь только строчные символы или просто цифры в своем пароле, и поэтому он не может настроить атаку грубой силы на использование только этих символов. И поскольку вы, надеюсь, будете дросселировать неправильные логины, грубая сила не является хороший вариант в любом случае.
  • Представьте себе, что «правильная батарея штатной лошади» от знаменитого xkcd. Хотя все эти слова находятся в словаре и могут даже не выполнить неверно реализованную проверку пароля, это очень безопасно. В то время как одно словарное слово чрезвычайно маловероятно много, они будут легко запоминаться и защищаться (злоумышленнику придется попробовать все, например, комбинации из 4-х слов, которые являются DAMN LOT, даже с помощью словаря на 1000 слов).

Так гораздо лучше, политика паролей будет:

  • Отклонить явно плохие последовательности. Это последовательные цифры, такие как 12345 или 54321. qwertz, qwerty и т. Д. Также плохи.
  • Отклонить любой пароль, который можно найти в словаре в целом. Обязательно используйте как английский словарь, так и один для каждого языка, поддерживаемого вашим сайтом.
  • Отклонить любой другой пароль, который может быть небезопасным. Содержит имя пользователя (даже если обратное)? Неа. Содержит часть до @ адреса электронной почты пользователя? Неа. Содержит его дату рождения? Неа.
  • Требуется не менее 8 символов (как вы уже собираетесь делать).

Там также интересный пост на сайте IT Security Stack Exchange, который вы должны прочитать: Short complex password, or long dictionary passphrase?

+0

Да, я тоже думал о том, чтобы делать это с логическим логированием, но это будет трюк для выяснения, есть ли у пароля какой-либо символ, если (! Password.Any (c => char.IsSymbol (c))) – Kriss

Смежные вопросы