Защита временных паролей, отправляемых по электронной почте пользователям?
-
06-07-2019 - |
Вопрос
У меня есть простое веб-приложение, в котором администраторы могут создавать пользователей. Пользователи не создают себя. Все, что нужно сделать администратору, это ввести имя пользователя, адрес электронной почты и временный пароль, отправленный пользователю для входа в систему. Это электронное письмо отправлено в текстовом формате. Если пользователь входит в систему в первый раз, он должен изменить свой пароль и ввести секретный вопрос и ответ. Очевидно, что пользователь должен знать свой временный пароль, чтобы войти в систему в первый раз, и это единственный способ, которым я знаю, сообщить ему об этом (по электронной почте). Другой вариант - администратор позвонит пользователю и сообщит ему по телефону или лично его временный пароль, но это непрактично. Как я могу справиться с такой ситуацией?
Решение
Обычно я использую временный URL-адрес на основе записи приглашения на серверной части. По сути, вы создаете запись приглашения и генерируете хэш на основе некоторой информации, например, адреса электронной почты пользователя, отметки времени и случайного значения. Сохраните хеш как часть записи приглашения, а затем отправьте им URL с хешем в качестве параметра.
Когда они щелкают по ссылке, просматривают приглашение и проверяют, существует ли оно и не использовалось - тогда разрешите им установить свой пароль и аннулировать приглашение.
Это избавляет от необходимости посылать пароль любого типа, и вы можете установить срок действия в своих записях приглашения, если хотите.
Другие советы
Сценарий, который вы описываете, очень распространен: отправка временного пароля по электронной почте и его изменение при первом входе в систему. Если у вас нет конкретной проблемы с этой моделью, я не вижу причин не использовать ее. Пользователи с административным вызовом могут усложниться - я бы избежал этого любой ценой.
Вы можете сгенерировать пользовательский URL с паролем и хешем пользователя в качестве аргумента, где пользователь должен войти в систему сам. Хеш будет трудно получить, если у злоумышленника нет информации