Возможно, это лучший вопрос для the Security SE, но я полагаю, что это не было бы неплохим местом, чтобы спросить об этом.Отправка одноразового пароля по почте
Я разрабатываю веб-приложение для проведения онлайн-выборов внутри компаний. Избиратели могут войти в приложение, проголосовать за своего любимого кандидата, а затем выйти из приложения.
Избиратели все получают присваивается довольно непредсказуемый имя, по крайней мере, 4 случайных чисел (по РНР random_int()
и совершенно непредсказуемой пароль (по РНР random_bytes()
.
клиент хочет отправить имя пользователя и пароль каждого избирателя (иногда до 5 000 разных людей) по электронной почте. Я не большой фанат, но это для меня или нет. Электронная почта отправляется через SSL, так что, по крайней мере, это что-то.
Я думал, что, поскольку избиратели только один раз голосовать, я могу деактивировать их учетные записи сразу же после их голосования. Вход снова с теми же учетными данными wo тогда не работает. Кроме того, я мог менять свой пароль каждые 24 часа и отправлять избирателей, которые еще не проголосовали за новое письмо с обновленными учетными данными. Выборы обычно длится 3-5 дней, поэтому эти обновленные электронные письма будут автоматически выступать в качестве напоминания о голосовании. Когда выборы закрываются, все связанные аккаунты также будут дезактивированы.
Действительно ли это достаточно безопасно? Я читал много статей, которые заставляют вас использовать единовременные URI с токенами, но созданные учетные записи в моем приложении могут быть зарегистрированы только один раз, после чего они деактивируются. На мой взгляд, однократные URI с формами для пользователя для создания нового прохода - это хлопот для пользователя, так как он будет только входить в систему один раз, а затем навсегда забыть об учетной записи.
ПРИМЕЧАНИЕ: все сгенерированные пароли проходят bcrypt()
, прежде чем они будут сохранены в базе данных. Письмо отправляется сразу после создания пароля, и на самом деле это единственный раз, когда пароль можно просматривать в текстовом формате (хотя через SSL, для чего это стоит).
Если вы отправляете уникальный URL-адрес с токеном, зачем нужна форма для создания пароля? Как вы сказали, они не регистрируются повторно для полной учетной записи пользователя как таковой, им просто разрешено выполнять одноразовое действие, а затем заблокированную учетную запись. Так вы не можете просто отправить URL-адрес и после голосования, истечь URL? Создайте токен для URL, используя некоторые уникальные идентификаторы, такие как идентификатор пользователя и что-то случайное, запустите его с помощью сильного алгоритма хэширования, такого как bcrypt. – BadHorsie
Должен ли я по-прежнему отправлять имя пользователя и пароль вместе с этим URL-адресом? Этот пакет выглядит прилично для работы https://github.com/spatie/laravel-url-signer – Loek
Нет, вам не нужно имя пользователя или пароль. Просто уникальный безопасный хэш, который хранится с записью пользователя. – BadHorsie