Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Хотя бы 1 буква и хотя бы 1 цифра
Покинул форум
Сообщений всего: 393
Дата рег-ции: Апр. 2012
Помог: 2 раз(а)
Помогите, пожалуйста, написать регулярку валидации пароля.
Опыта в написании регулярок крайне мало...
Условие: Пароль должен содержать хотя бы 1 букву и цифру и быть длиной от 6 до 16
На ум приходит что-то вроде
/^(а вот что тут должно быть - не пойму...){6,16}$/i
Fart
Отправлено: 06 Октября, 2016 - 18:18:49
Посетитель
Покинул форум
Сообщений всего: 324
Дата рег-ции: Июль 2016
Помог: 10 раз(а)
пускай лучше сам пользователь будет выбирать какой пароль, а ты только проверяй насколько длинный он. в фронт-энде можешь проверять какие символы вводит.
при получении вводимого пароля
---используешь одну из функций strlen, iconv_strlen
---проверяешь сколько символов
---далее используешь md5(пароль.соль)
а там какие символы ввел пользователь забей и к тому же получишь чуть чуть безопасности связанные с паролями.
Покинул форум
Сообщений всего: 393
Дата рег-ции: Апр. 2012
Помог: 2 раз(а)
Fart пишет:
в фронт-энде можешь проверять какие символы вводит.
Надо не забывать, что JS имеет свойство отключаться..
Поэтому надежней серверной проверки нету ничего.
Про формирование паролей и безопасность я как раз в курсе.
Еще я в курсе, что регулярки - это еще те капканы... Всегда есть вариант что-то упустить.
Но всё же хочется, чтобы взлом аккаунтов пользователей сводился к минимуму. Поэтому одно из требований - такие пароли. Понятно, что это не панацея, но всё же лучше, чем просто проверять на длину.
Мелкий
Отправлено: 07 Октября, 2016 - 09:53:48
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
NeuroZ пишет:
одно из требований - такие пароли
NeuroZ пишет:
16}$/i
Ну-ну.
Если есть явное требование предметной области (работа с деньгами и/или конфиденциальными данными) - проверяйте минимальную сложность пароля. Но никогда не ограничивайте максимальную.
Операция редкая, но связана с безопасностью. Значит должна иметь очевидное поведение. Если вы плохо знаете регулярки, то лучше будет максимально простой вариант:
md5 не имеет и никогда не имел отношения к паролям. Это быстрый метод хеширования для создания отпечатка и верификации корректности данных.
password_hash
----- PostgreSQL DBA
NeuroZ
Отправлено: 07 Октября, 2016 - 10:03:40
Посетитель
Покинул форум
Сообщений всего: 393
Дата рег-ции: Апр. 2012
Помог: 2 раз(а)
Мелкий пишет:
Если вы плохо знаете регулярки, то лучше будет максимально простой вариант:
Да, у меня проскакивала такая мысль, но это как-то не по феншую.. рука не поднималась так написать... (Добавление)
Мелкий пишет:
и никогда не имел отношения к паролям
Очень много CMS в свое время хранили пароли в формате md5() или md5(md5()) *Но я не имею в виду, что это хорошая практика
Очень много CMS в свое время хранили пароли в формате md5() или md5(md5())
И токены генерируют rand'ом, и много более серьёзные дыры оставляют. Это не делает md5 стойким хэшом.
----- PostgreSQL DBA
NeuroZ
Отправлено: 07 Октября, 2016 - 11:46:05
Посетитель
Покинул форум
Сообщений всего: 393
Дата рег-ции: Апр. 2012
Помог: 2 раз(а)
Мелкий пишет:
От непонятно как работающего кода стало легче?
Ну почему же непонятного? Начиная с любого символа кроме пробела с кол-вом вхождений от 0 и больше должна идти хотя бы 1 буква латинского алфавита в нижнем регистре, после чего хотя бы 1 буква в верхнем регистре, после чего хотя бы 1 цифра, потом любой набор символов и всё это дело должно состоять минимум из 7 знаков
Единственное - не понятно что означает ~ и почему не /regex/ (Добавление)
У меня кстати нечто похожее получилось написать (заглавные буквы не учитываю), вот только не пойму как в данному примере установить условие на кол-во символов...
Еще понял свою ошибку в чтении Вашей регулярки... Последовательность (?=) не означает строгое соответствии следования друг за другом? Так, например, эта регулярка подходит под выражение с заглавной буквы, после которой идет цифра, а потом все строчные буквы. (Добавление)
p.s. Спасибо за работающее решение (Добавление)
p.p.s. А можете объяснить как ограничить число символов в моей регулярке?
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
NeuroZ пишет:
Ну почему же непонятного?
Начиная с любого символа кроме пробела с кол-вом вхождений от 0 и больше должна идти хотя бы 1 буква латинского алфавита в нижнем регистре, после чего хотя бы 1 буква в верхнем регистре, после чего хотя бы 1 цифра, потом любой набор символов и всё это дело должно состоять минимум из 7 знаков
Вот я и говорю - непонятно как работающий код. Регулярку вы поняли неверно. Значит и далее здесь будут проблемы.
В регулярке написано: в последующем тексте в любом месте должна быть хотя бы одна буква a-z, хотя бы одна цифра, хотя бы один A-Z. Строка не меньше 7 символов. Никаких утверждений о следовании символов нет. Про пробел тем более ничего не сказано.
NeuroZ пишет:
что означает ~ и почему не /regex/
Личное предпочтение. Ограничитель может быть любым из довольно большого списка.
----- PostgreSQL DBA
NeuroZ
Отправлено: 07 Октября, 2016 - 12:10:58
Посетитель
Покинул форум
Сообщений всего: 393
Дата рег-ции: Апр. 2012
Помог: 2 раз(а)
Мелкий пишет:
Про пробел тем более ничего не сказано.
тут я извиняюсь... в голове держал одно, а написал другое)
. - любой символ, кроме перевода строки. - это я по ошибки назвал пробелом
А про ошибку чтения регулярки - я поправился. Просто думал, что (?=) выполняется последовательно. Теперь стал знать больше))
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.