Подтвердить что ты не робот

Regex для пароля PHP

Я нашел script онлайн, и у него есть регулярное выражение паролей в JavaScript. Я все еще хочу использовать его, но для большей безопасности я хочу использовать PHP для проверки моего пароля, но я бесполезен с регулярным выражением.

Требования:

  • Должно быть не менее 8 символов
  • Должно содержать как минимум 1 номер
  • Должен содержать хотя бы один символ верхнего регистра
  • Должен содержать хотя бы один строчный символ

Как я могу построить строку регулярных выражений для удовлетворения этих требований?

4b9b3361

Ответ 1

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

$uppercase = preg_match('@[A-Z]@', $password);
$lowercase = preg_match('@[a-z]@', $password);
$number    = preg_match('@[0-9]@', $password);

if(!$uppercase || !$lowercase || !$number || strlen($password) < 8) {
  // tell the user something went wrong
}

Ответ 2

^\S*(?=\S{8,})(?=\S*[a-z])(?=\S*[A-Z])(?=\S*[\d])\S*$

От прекрасных людей на Zorched.

  • ^: привязано к началу строки
  • \S*: любой набор символов
  • (?=\S{8,}): не менее длины 8
  • (?=\S*[a-z]): содержит хотя бы одну строчную букву
  • (?=\S*[a-z]): и по крайней мере одно прописное письмо
  • (?=\S*[\d]): и по крайней мере одно число
  • $: привязано к концу строки

Чтобы включить специальные символы, просто добавьте (?=\S*[\W]), который не является символами слова.

Ответ 3

Один из возможных шаблонов регулярных выражений:

/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)[a-zA-Z\d]{8,}$/

Как в этом примере .

Но вы действительно не должны ограничивать пароли!

введите описание изображения здесь

Признай это. Как разработчик мы сделали больше, чтобы внести свой вклад в провал нашей клиентской и пользовательской онлайн-безопасности, потому что мы слишком упрямы или ленивы, чтобы правильно обрабатывать пароли. Посмотрите на некоторые плоды нашего труда:

Пароль должен иметь длину от 5 до 32 символов. Допустимые символы включают буквы, цифры и подчеркивание.

Пароль должен иметь длину от 6 до 12 символов. Допустимые символы включают буквы и цифры.

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

Тогда есть этот камень. Первоначальные требования составляли не менее 8 символов. Случайное включение 7 символов приводит к появлению ошибки перед пользователем:

введите описание изображения здесь

Ограничение пароля Gone Wrong Обратите внимание на строку тега. Иронии?

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

Нет никаких сомнений в том, что наши намерения были хорошими. В конце концов, пользователи и клиенты не могут должным образом защитить себя. Они не создают надежных паролей, они чаще используют слово "пароль" в качестве пароля. Они не прислушиваются к предупреждениям, новостям или ужасу, с которыми сталкиваются друзья, которые пострадали от кражи личных данных. Взлом крупных розничных сетей их очень мало фазирует. Мы, как разработчики, решили помочь нашим пользователям избежать этих ошибок. Я соглашусь, что наши попытки не оправдались и, возможно, даже способствовали этой проблеме.

Скорее всего, мы сделали это хуже.

Помещая тайные ограничения на пароли, мы фактически вынудили наших пользователей плохо думать и поэтому заставили их искать путь наименьшего сопротивления, простых взломанных паролей. Мы сделали это, потому что мы привыкли к ограничениям для нас. Сисадмины ограничили нас до 8 символов, поэтому мы проецировали предел на остальной мир. Настало время, когда мы остановились и узнали, как обращаться с любой длиной пароля с любым включенным символом. Мы можем исключить пробелы из пароля, но кроме этого мы не должны устанавливать никаких ограничений на пароли.

Затем мы можем поощрять хорошие методы безопасности, такие как фразы или случайные слова. Пользователи, как только они обнаружат это, будут счастливо счастливы, что им не нужно помнить какую-то туповатую комбинацию букв и цифр, таких как f @rtp00p.

Я вижу, как ты закатываешь глаза. Это означает, что вам нужно узнать, как правильно использовать хэш-пароли и как сравнивать введенные пароли с хэшами. Вам придется бросить какое-то действительно тяжелое завоеванное регулярное выражение. Не дай бог, вам придется переработать какой-то код! Базы данных могут содержать очень большие хэшированные пароли, и мы должны воспользоваться возможностями.

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

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

Что вы должны делать?

PHP встроенные функции отлично обрабатывают безопасность паролей, пробелы, специальные символы и все. Если вы используете версию PHP меньше, чем 5.5 вы можете использовать пакет совместимости password_hash() .

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

Ответ 5

Это проверяет мин. 1, а также min/max:

^(?=.*\d)(?!.*\s).{4,8}$