'password' => [
'required',
'confirmed',
'min:8',
'regex:/^(?=\S*[a-z])(?=\S*[A-Z])(?=\S*[\d])\S*$/',
];
К сожалению, такие простые правила означают, что пароль
Abcd1234
будет признан хорошим и качественным, так же как и Password1
. С другой стороны, пароль mu-icac-of-jaz-doad
не пройдёт валидацию.Некоторые специалисты говорят, что это не лучший вариант.
В реальности
Abcd1234
и Password1
— плохие пароли, а mu-icac-of-jaz-doad
— хороший пароль. В этом несложно убедиться.Вот первые два пароля.
А вот два пароля, которые не пройдут проверку на надёжность.
Что же делать? Может, не стоит принуждать к использованию спецсимволов и внедрять всё новые правила, вроде запрета на повтор нескольких символов подряд, использование не одного, а двух-трёх спецсимволов и цифр, увеличение минимальной длины пароля и т д.
Вместо всего этого достаточно сделать простую вещь — просто установить ограничение на минимальную энтропию пароля, и всё! Можно использовать для этого готовый оценщик zxcvbn.
Есть и другие решения, кроме zxcvbn. Буквально на прошлой неделе на конференции по безопасности ACM Computer and Communications Security была представлена научная работа (pdf) специалистов по безопасности из научно-исследовательского подразделения Symantec Research и французского исследовательского института Eurecom. Они разработали новую программу для проверки надёжности паролей, которая оценивает примерное количество необходимых попыток брутфорса, используя метод Монте-Карло. Предлагаемый способ отличается тем, что требует минимальное количество вычислительных ресурсов на сервере, подходит для большого количества вероятностных моделей и в то же время довольно точный. Метод проверили на паролях из базы 10 млн паролей Xato, которые лежат в открытом доступе (копия на Archive.org) — он показал хороший результат. Правда, это исследование Symantec Research и Eurecom носит скорее теоретический характер, по крайней мере, свою программу они не выложили в открытый доступ в каком-либо приемлемом виде. Тем не менее, смысл работы понятен: вместо эвристических правил проверки паролей веб-сайтам желательно внедрить проверку на энтропию.
Комментарии (25)
ploop
25.10.2015 19:44+17Оффтоп:
Для этого устанавливают базовые правила, которые требуют обычно указать хотя бы одну прописную букву, одну строчную букву, одну цифру и так далее
Гореть им в аду. Сайт может подсказать пользователю, что пароль плохой/хороший, но никак не заставлять его использовать тот или иной. Исключение — ограничение на минимальную длину в критичных сервисах, типа онлайн-банков.splatt
26.10.2015 00:04+7Ха-ха. Недавно устанавливал пароль для оплаты через Visa Secure в одном банке. Обычно я требований к паролю не читаю т.к. в моих паролях есть и заглавные, и строчные, и цифры, итд и мои пароли как правило проходят все требования. А тут бац — подсвечивает красным поле, мол, неправильно ввел.
Нажимаю на подсказку, и вижу единственное ограничение: «длина пароля не должна превышать 10 символов».
Первая мысль — «они там нормальные вообще?».KivApple
26.10.2015 03:11+1Я, кстати, вообще не понимаю зачем нужны ограничения на максимальную длину пароля. Ведь в любом случае пароль хешируется (если не хешируется, то о чём вообще можно говорить с такими людьми) перед попаданием в базу, а длина хеша не зависит от длины пароля.
ploop
26.10.2015 08:31Весело :)
А не пробовали написать в поддержку с вопросом, типа, wtf? Интересно, что ответят.
Я сталкивался на ограничения по максимальной длине, но они были как правило достаточные, 20-25 символов (да, у меня бывают пароли больше 30). Возможно это защита от копипаста, так как в буфере пользователя может оказаться что угодно.
PingWin
26.10.2015 18:11Дайте угадаю — ВТБ24? Это имхо единственный инет-банк, где я увидел ограничение на максимальную длину пароля :)
ankh1989
26.10.2015 02:35+1Для таких нужен ад в котором для доступа к еде нужно каждый раз вводить пароль минимум 32 символа и который надо менять раз в неделю, а при выборе нового пароля требуется пройти самую упоротую проверку на сложность пароля, а также не менее упоротую проверку на непохожесть на прежние пароли.
KvanTTT
25.10.2015 21:24+1Можно еще пробовать сжимать пароль и считать коэффициент сжатия. Или использовать алгоритмы анализа псевдослучайных последовательностей.
urix
26.10.2015 15:53Не пройдет.
Длинный пароль, состоящий из 6 слов с повторяющимися буквами, сожмётся очень хорошо. Но будет криптостойким
Jeditobe
25.10.2015 23:16+4Угу, идея сайта, собирающего новый словарик паролей.
Liumee
26.10.2015 03:13+1Тоже посетила такая параноидальная мысль. Но посмотрел в инспекторе — ничего не передается. А ведь до этого вебдванольного бума с переносом какой только можно логики на сторону клиента, вполне возможно что такие сайты отправляли бы данные на сервер.
ankh1989
26.10.2015 12:23+1Оно может передаться потом. Скажем когда вы пароль вводите, он посылается в невидимый iframe в localStorage на каком нибудь домене, а потом вы заходите неделю спустя на какой то другой сайт, тот грузит этот же iframe и берет из него пароль.
magic4x
26.10.2015 10:09Кто-нибудь уже выяснил почему многие запрещают спецсимволы? Тинькофф банк, например, их не разрешает.
ov7a
26.10.2015 11:40Могу предположить, что так пытались запретить использовать не ASCII символы в пароле, чтобы избежать проблем с кодировками. Ну а получилось как всегда: [A-Za-z0-9]
Scratch
Демка zxcvbn
dl.dropboxusercontent.com/u/209/zxcvbn/test/index.html