Лучшие практики для вопросов безопасности в веб-приложениях - PullRequest
3 голосов
/ 13 июля 2009

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

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

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

  • Являются ли вопросы безопасности лучшим подходом к этой проблеме?
  • Если так, какие вопросы лучше?
  • Сколько вопросов требуется пользователю для ввода ответов?
  • Нужно ли ставить капчу на странице забытого пароля?
  • Лучше ли пользователям задавать свои вопросы?

Любая помощь / комментарии / литература по этому вопросу будет принята с благодарностью.

Ответы [ 3 ]

1 голос
/ 16 июля 2009

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

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

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

Удачи!

0 голосов
/ 08 сентября 2018

Являются ли вопросы безопасности лучшим подходом к этой проблеме?

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

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

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

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

0 голосов
/ 14 июля 2009

Являются ли вопросы безопасности лучшим подходом к этой проблеме?

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

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

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

Сколько вопросов требуется пользователю для ввода ответов?

Разрешить один комбинированный вопрос / ответ.

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

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

...