Блог Игоря Шевченко

Неверное имя пользователя или пароль

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

В реальности всё это работает не совсем так успешно. К примеру, недавно я забыл пароль от сервиса Grammarly. Изначально при входе я увидел типичную надпись.

Пошел восстанавливать пароль, там сообщение тоже расплывчатое: если вы зарегистрированы, то письмо отправлено, но если такого аккаунта нет, то ничего не отправлено.

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

Но если бы я был плохим парнем (или если бы хотел получать в два раза больше маркетинговых писем), то просто пошел бы на страницу регистрации. Когда вводишь там занятый почтовый адрес, сайт честно сообщает об этом.

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

Если вы хотите сделать авторизацию на сайте безопаснее, есть более эффективные способы:

  1. Ограничивайте количество попыток ввода неправильного пароля, а потом показывайте капчу или блокируйте.
  2. Помогайте пользователю выбрать надежный пароль с помощью индикаторов сложности пароля.
  3. Добавьте двухфакторную аутентификацию.
  4. Зарегистрируйте логины-ханипоты (вроде admin@yoursite.com) и блокируйте тех, кто пытается в них войти.

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

26 ноября 2017 11:55

Комментарии

Антон 7 декабря 2017 15:07

Вообще-то заставлять хакера проверять логины на форме регистрации - таки усложнение его работы. С точки зрения дешевизны не сообщать подробности ошибки - довольно выгодная защита.
Ограничение количества попыток, два фактора - куда более дорогие решения.

Nick 7 декабря 2017 18:39

Не очень понятен совет 4. Кого/что я должен блокировать?

Игорь Шевченко 7 декабря 2017 21:53

Антон, а в чем усложнение? В том, что хакеру придется потратить немного времени и дописать скрипт для работы с формой регистрации? Не очень надежно получается.

Игорь Шевченко 8 декабря 2017 00:31

Nick, схема такая:

1. Берете какие-нибудь очевидные имена (например, admin)
2. Регистрируете их у себя на сайте
3. Никогда сами ими не пользуетесь
4. Сразу безжалостно блокируете всех, кто пытается в них войти, потому что это явные злоумышленники.

Не знаю, насколько это эффективно, потому что сам ни разу так не делал, но советы подобные видел.

Оставить комментарий