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

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

  • «Мой Безопасный Пароль» ←Извините, пробелы запрещены;
  • «МойБезопасныйПароль» ← Извините, пароль должен содержать цифру;
  • «МойБезопасныйПароль1«← Извините, пароль должен содержать спец. символ;
  • «МойБезопасныйПароль%1» ← Извините, символ «%» запрещен;
  • «МойБезопасныйПароль_1» ← Извините, пароль должен быть короче 16 символов;
  • «Задница» ← Извините, пароль должен быть длиннее 7 символов;
  • «Идите_в_задницу» ← Пароль не должен содержать оскорбления;
  • «Пароль_1» ← Пароль принят.

Придумывая глупые правила для паролей, вроде обязательного наличия 1 специального символа или цифры, вы усложняете жизнь не потенциальному взломщику, а пользователю — запомнить пароль с несколькими спец. символами намного сложнее, а вот компьютеру всё равно, какие символы перебирать, он будет делать это так же быстро.

Именно это отлично иллюстрирует классический комикс XKCD:

В сегодняшнем мире облачных вычислений и сверхбыстрых процессоров пароль длиной 8 символов (даже спец. символов!) — это всё равно, что отсутствие пароля вовсе. Истина в том, что одна из вещей, которые на самом деле имеют значение — это длина.

Но не только длина, потому что… ну, вы встречали когда-нибудь реальных юзеров? Это люди, которые делают бесполезной любую защиту. Так что приготовьтесь к тому, что, если даже пароли будут длинными, они будут небезопасными:

Скорее всего, в первую очередь хакеры попробуют брутить по базе самых популярных паролей: как известно, примерно 30% пользователей используют на своих аккаунтах один из паролей из базы и 1,6% — пароль из первой десятки самых популярных.

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

Кстати, эти базы популярных паролей позволяют сделать интересные выводы и о длине:

Заметим, что только 5 из 25 популярнейших паролей состоят из 10 символов, так что если мы разрешим ставить пароли длиной от 10 символов, то уже снизим степень подверженности бруту по базе на 80%.

На этом можем сделать вывод, что 10 — та самая оптимальная минимальная длина пароля для ваших пользователей. Если это модератор или администратор, взлом профиля которого нанесет больший ущерб, то длину пароля стоит сделать не меньше 15 символов.

Третье правило: не забывайте о Unicode. Дело в том, что реальная длина пароля может не совпадать с количеством символов, например, если это эмодзи или китайский язык. Как насчет этого пароля из четырёх символов?

✅🐎🔋🖇️

Его реальная длина — 8. Потому что:

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

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

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

  • Не разрешайте использовать пароль, совпадающий с логином;
  • Не разрешайте использовать пароль, совпадающий с e-mail;
  • Не разрешайте использовать пароль, совпадающий с адресом сайта.

В остальном правила для паролей — это полный bullshit. Учитывайте длину.

Источник: CodingHorror