Существует лучшая практика безопасности, когда формы ввода вместо надписи «неверный пароль» должны показать надпись «неправильное имя пользователя или пароль». Эта, так называемая, «лучшая практика» — отстой.

Например, Stripe и GitHub’s придерживаются этой практики.

Stripe платежка GitHub’s платежка

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

Но вот, в чем проблема.

Stripe ошибка

GitHub’s теперь вы знаете мое имя пользователя
Блин, теперь вы знаете мое имя пользователя… Думаю, я облажался. Не говоря уже о том, что вы могли просто зайти сюда github.com/travisjeffery.
Все, что нужно сделать хакеру, это зарегистрироваться, чтобы узнать, действительно ли имя пользователя или нет. Зачем тогда беспокоиться с запутыванием формы входа? Только самого тупого, ленивого хакера остановит надпись «имя пользователя или пароль неверны». Вы не получаете никакой безопасности, но ваши пользователи теряют ясность.

Stripe имеет поле reCAPTCHA, чтобы предотвратить примитивные скрипты, атакующие их форму входа. Однако, ее взламывали несколько раз (1, 2) и, вероятно, она никогда не будет идеальна. Даже если бы reCAPTCHA была совершенна, хакер мог вручную проверить имена пользователей, пытаясь зарегистрироваться, а затем автоматизировать атаку на страницу входа.

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

Сообщение «неправильное имя пользователя или пароль» — полная фигня.

-

Если есть вопросы пишите автору в Twitter @travisjeffery.

Жмите лайк и поделитесь статьей, если вы считаете ее полезной.

Спасибо за прочтение.