Как правильно защитить забытый пароль - PullRequest
1 голос
/ 24 апреля 2019

Я проектирую некоторые функции забытого пароля в приложении ASP.NET, и у меня возник вопрос о том, как лучше защитить конечную точку, где пользователь может сбросить свой пароль.

Как я понимаю, это работает(примерно) следующее:

  • Пользователь нажимает «Забыли пароль» в форме входа
  • Пользователь попадает на экран, где он вводит свою электронную почту, связанную с его учетной записью
  • Затем пользователь выводится на экран, где он может ответить на некоторые вопросы безопасности (требуется моей компанией)
  • После правильного ответа на вопросы пользователю будет отправлено электронное письмо со ссылкой.
  • Пользователь нажимает на ссылку в своем электронном письме, которая приведет его к форме сброса пароля

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

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

1 Ответ

1 голос
/ 27 апреля 2019

Решение состоит в создании токена, который можно использовать один раз на странице сброса.Вы отправляете по электронной почте ссылку, аналогичную https://example.com/PasswordLost?token=467dc4ad9acf4, затем сайт проверяет, является ли токен действительным, и отображает страницу изменения пароля.Чтобы повысить безопасность, можно ограничить срок действия токена: достаточно десяти минут.После использования токен больше не должен использоваться.

Существует много способов создания токена.Вы можете сгенерировать случайную строку и сохранить ее в базе данных с соответствующим адресом электронной почты и датой истечения срока действия токена.Затем вы можете проверить его, запросив базу данных.Другое решение, которое я предпочитаю, это генерировать токен, который шифруется сервером.Затем вы можете расшифровать его и проверить содержащиеся в нем данные (адрес электронной почты пользователя и срок действия, дата последнего изменения пароля).Таким образом, вам не нужно ничего хранить на сервере.Это то, что ASP.NET Core Identity делает .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...