2011-02-01 1 views
3

У меня есть ASP.NET, который позволяет пользователям сбрасывать пароли.Безопасность сброса пароля в приложении ASP.NET

Процесс

  1. Пользователь нажимает на ссылку сброса по электронной почте. Ссылка содержит токен безопасности.
  2. Пользователь попадает на страницу 1 вопросов и ответов на вопросы безопасности
  3. Если вопросы вернутся, перейдите на страницу 2 и сбросьте пароли.

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

Для защиты от этого я планирую.

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

Мой вопрос. Это хитрый план, или кто-нибудь может увидеть недостаток в нем?

ответ

2

Шаг 1 вашего плана, вероятно, не будет работать очень хорошо, полагаясь на значения реферера, которые будут доступны, не рекомендуется, так как это a) легко подделать, b) часто отключается параноидальными пользователями.

Шаг 2 звучит так, как будто вы хотите использовать подход типа токена CSRF, это хорошая идея.

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

2

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

  • определенный TimeSpan истечет
  • новое сообщение электронной почты генерируется
  • пользователь сбрасывает пароль
2

Почему бы вам не оставить пользователя на одной странице? Я бы использовал WizardControl.

Если вы решили остаться с использованием двух страниц, вы можете установить флаг в своей базе данных, если на вопросы безопасности для данного токена был дан правильный ответ. На стр. 2 вы проверяете, установлен ли флаг, если нет -> перенаправление на страницу 1.

+1

Хорошо, хорошо и легко. – Greg