Рекомендации по вопросам безопасности в веб-приложениях

Я работаю над веб-приложениями, в которых - хотите верьте, хотите нет - пользователям не требуется указывать свой адрес электронной почты для регистрации. Эти требования не могут измениться. Пользователи будут входить в систему с идентификатором и паролем, как любой стандартный веб-сайт. Проблема, с которой я столкнулся, связана с пользователем, который забыл свой пароль. Когда они хотят создать новый, как мне подтвердить их личность?

Изначально я собирался заставить пользователей выбрать секретный вопрос (из списка 5) и дать ответ. Если они когда-либо заходили на страницу с забытым паролем, им пришлось бы ввести свой логин, а также ответ на секретный вопрос. Это кажется немного ненадежным, поскольку ответы на такие вопросы (девичья фамилия матери, город рождения и т. Д.), Как правило, не так сложно получить.

Итак, вот некоторые из моих вопросов:

  • Контрольные вопросы - лучший способ решить эту проблему?
  • Если да, то какие вопросы лучше всего?
  • На сколько вопросов пользователь должен будет ввести ответы?
  • Обязательно ли ставить CAPTCHA на страницу с забытым паролем?
  • Не лучше ли пользователям создавать собственные вопросы?

Будем признательны за любую помощь / комментарии / литературу по этому поводу.


person Zakir Hemraj    schedule 13.07.2009    source источник


Ответы (3)


Контрольные вопросы - лучший способ решить эту проблему?

Поскольку вы не можете использовать какие-либо другие средства аутентификации (например, адрес электронной почты, OpenID и т. Д.), Это лучшее, что вы действительно можете сделать. Однако вы всегда можете добавить «подсказку пароля» к процессу регистрации.

  • Если да, то какие вопросы лучше всего?
  • Не лучше ли пользователям создавать собственные вопросы?

Будет намного проще, если вы позволите пользователю написать свой собственный вопрос, в отличие от стандартных «первая машина» или «первое домашнее животное». Это хороший отказоустойчивый вариант, поскольку (обычно) он обеспечивает очень сложную комбинацию вопросов и ответов, которую можно случайно угадать, и, вероятно, такой же секретный, как и пароль.

На сколько вопросов пользователь должен будет ввести ответы?

Разрешите одну комбинацию вопросов и ответов.

Обязательно ли ставить CAPTCHA на страницу с забытым паролем?

Что ж, должна быть какая-то попытка защититься от атак грубой силы, особенно со стороны ботов. Я бы использовал ту же технологию, что и SO: reCAPTCHA

person John Rasch    schedule 13.07.2009
comment
Бред какой то. секретные вопросы плохая практика безопасности и подсказки паролей тоже. Вот почему. Если хакеры лучше решают проблему, чем исходный пользователь, то вы упрощаете задачу для хакеров и усложняете задачу для законных пользователей: таким образом, вы делаете это хуже, чем вообще не сбрасывать пароль. Пользователям необходимо оставить какой-либо контакт (адрес электронной почты, номер мобильного телефона и т. Д.) Для сброса пароля. - person TheGreatContini; 08.09.2018
comment
Согласен, это лучшая практика в настоящее время. Однако в этом вопросе прямо говорится, что предоставление адреса электронной почты не является первым делом, и это ограничение было чрезвычайно распространено много лет назад, когда был написан этот вопрос. - person John Rasch; 10.09.2018

Я не могу вспомнить местоположение, но если вы выполните поиск в Google с использованием аутентификации, основанной на знаниях, вы обнаружите, что аутентификация вопросов и ответов очень слабая. Одна из серьезных проблем - это энтропия (возможная случайность) возможных ответов и реальных ответов. Если вы спросите любимый цвет, на самом деле существует лишь очень небольшой список цветов, который выберет большинство пользователей. Это может стоить 1 бит энтропии. Затем, если вы зададите второй вопрос, например, о городе, в котором вы выросли, это может дать вам еще немного энтропии (в Мексике есть что-то вроде 30% -ного шанса для каждого из 3 городов для этого ответа).

По моим оценкам, чтобы получить пароль, равный по силе 8-символьному паролю, вам потребуется около 26 вопросов.

Тем не менее, вы могли бы делать другие вещи, чтобы связаться с пользователем. Вы можете попробовать отправить пользователю текстовое сообщение вместо электронного письма - регистрирует ли пользователь номер телефона? Пользователь может хранить сертификат на своем компьютере, который он может загрузить вместе с запросом на сброс пароля (вам придется приложить усилия, чтобы этот сертификат был привязан к компьютеру). Вы можете сделать что-то после регистрации, когда пользователь может отправить адрес электронной почты.

Удачи!

person Community    schedule 16.07.2009

Контрольные вопросы - лучший способ решить эту проблему?

Абсолютно нет.

Восстановление пароля должно работать для законных пользователей и не работать для злоумышленников. Секретные вопросы делают наоборот: хакеры действительно хорошо их угадывают, но легитимные пользователи не могут вспомнить свои собственные ответы. Это доказано исследованиями. И именно поэтому NIST рекомендует не использовать секретные вопросы, т. Е. Аутентификацию, основанную на знаниях.

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

По умолчанию у вас нет возможности восстановить учетную запись, если пользователь забыл свой пароль. Не усугубляйте ситуацию секретными вопросами. Если вы действительно хотите сделать возможным восстановление пароля, то почему бы вместо того, чтобы заставлять пользователя выбирать и отвечать на секретные вопросы, вместо этого потребовать от них предоставить адрес электронной почты или номер телефона и сбросить пароль точно так же, как это делают все хорошие веб-сайты. Это?

person TheGreatContini    schedule 08.09.2018