2014-02-19 7 views
0

Я с нетерпением жду, чтобы иметь regx шаблон, чтобы соответствовать следующим критериям:Regex для проверки пароля конкретных критериев

Validate/требуют, чтобы поле содержит
Смешанный случай
10 минимальный характер длины
16 символов длиной макс
2 числовые присутствуют (минимум)

2 альфа присутствуют (минимум)

1 специальный символ (м inimum)

Разрешенные события: !#.*

Другие специальные символы должны быть отвергнуты

Все символы должны быть непоследовательных

Нет повторов, например, «! Alittle1A» будет недействительным, поскольку он имеет «Tt»

Любая помощь будет оценена

до сих пор я разработал:

var passwordPattern = /^(?=.*\d{2})(?=.*[a-z]{2,})(?=.*[A-Z]{2,})(?=.*[^a-zA-Z0-9]{2,})(!#.\*)\1?(?!\1).{10,16}$/; 

это не похоже, работает.

+0

Выполняется ли такая проверка на задней панели? Если нет, это действительно так. Нет ничего, что помешало бы JS-savvy пользователю просто отправить форму и в обход вашей проверки. Кроме того, есть ли какая-то особая причина, по которой вы не можете позволить персонажу в вашем пароле? Вы должны быть хэшированием и солить пароль на стороне клиента, прежде чем передавать его на сервер в любом случае, иначе вы просто приглашаете атаки. – Adrian

+3

Просто FYI: накладывая некоторые из этих ограничений, сила пароля фактически ослабляется. Также ... Мне очень жаль всех, кто должен написать ухищренный пароль, который они будут использовать в этой системе :( –

+0

Вот единственная причина, по которой вы будете применять ограничения пароля: http://programmers.stackexchange.com/a/15355 – Adrian

ответ

2

Вы можете использовать это регулярное выражение:

/^(?=(\D*\d){2})(?=([^a-z]*[a-z]){2})(?=[^!#.*]*[!#.*])(?!.*?(.)\1)[a-z0-9!#.*]{10,16}$/i 
+0

Я бы порекомендовал не проверять ограничения паролей на стороне клиента, за исключением, возможно, минимальной длины. Любой пароль любой сложности может быть хэширован, солен и отправлен на сервер, а серверу все равно, какие символы находятся в пароле, потому что все, что он видит, это SHA или MD5 хэш-строка. – Adrian

+0

Вам не хватает этого правила: 'Все символы должны быть непоследовательными', но действительно нужно объяснять, что это значит. , , последовательные буквы? Последовательный буквенно-цифровой? Последовательные символы Unicode? – talemyn

+0

Я подумал, что это здесь было описано здесь: '(?!. *? (.) \ 1)' – anubhava

2

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

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

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

Вот некоторые вопросы/ответы о том, почему то, что вы предлагаете, не помогает, а на самом деле может быть вредным:

  1. Why do modern websites still insist on archaic username/password requirements?

    Резюме: Делая это совершенно произвольно и не имеет никакого эффекта по безопасности

  2. Why do certain sites prevent spaces in passwords?

    Резюме: Он сводится к лень программиста или неопределенность в том, что пароли будут храниться безопасным образом или правильно обрабатываться

  3. Are there any valid reasons for disallowing characters and limiting the length of passwords?

    Резюме: ограничение длины может ограничить время хеширования

  4. Why do websites restrict the number/choice of characters in a password?

    Резюме: ленивые программисты

  5. Should you enforce password restrictions? (SitePoint)

    Резюме: ограничения паролей в высшей степени раздражает

Вот предложение - проверить некоторые пароли, которые соответствуют вашим ограничениям здесь:

https://howsecureismypassword.net/

После того, как вы сделали это, сравните «безопасность» этих паролей с некоторыми ниже этого стиля:

http://xkcd.com/936/

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

https://www.twilio.com/blog/2013/04/add-two-factor-authentication-to-your-website-with-google-authenticator-and-twilio-sms.html

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