2015-08-20 3 views
1

Я занимаюсь разработкой веб-приложения с использованием Django.Безопасный способ отправить ссылку «сбросить пароль»

В настоящее время я работаю на отправку «сбросить ссылку пароля» тщательных электронную почты (амазонка простого сервиса электронной почты - SES)

Механизма я использовал, то же самое с ответом «simeonwillbanks» ссылка ниже

Secure ways to reset password or to give old password

  1. Дайте пользователям опцию изменения пароля.
  2. Этот параметр сохраняет уникальный токен для пользователя. Токен в конце концов истекает (часы, день или дни).
  3. Ссылка отправлена ​​по электронной почте пользователю, который включает токен.
  4. Пользователь нажимает на ссылку по электронной почте.
  5. Если токен существует и не истек, ссылка загружает новую форму пароля. Если нет, не загружайте новую форму пароля.
  6. Как только пользователь устанавливает новый пароль, удалите токен и отправьте пользователю письмо с подтверждением.

Что я волнуюсь об этом, я не уверен, что этот способ безопасен с точки зрения безопасности. Что, если электронная почта будет захвачена хакером?

Я проверил на нескольких основных сайтах, как им это нравится.

  1. отправьте электронное сообщение «Сбросить пароль» и скопируйте ссылку.
  2. дать ссылку на другую и посмотреть, может ли он изменить пароль в моей учетной записи.

Из этого теста я выяснил, что кто-то еще может изменить мой пароль только по ссылке.

Если я не могу ничего сделать по ссылке, есть способ сделать электронную почту более безопасной? как механизм ssl (https) на веб-сайте?

Спасибо!

+0

Единственное, что вы можете сделать, это отправить сообщение с использованием SMTP/S вместо простого SMTP и сохранить срок действия токена как можно короче (минуты вместо часов или дней), но вы правы, это обычно используемый поток сброса пароля по своей сути небезопасен. –

+0

Вы можете, прежде всего, запросить дополнительные сведения о безопасности при вводе маркера или использовать второй фактор, например текстовые сообщения/мобильные номера. Вы также можете не запрашивать электронное письмо, но логин, который никогда не отображается никому на сайте (т. Е. Если вы хотите нападать на кого-то, вы не можете сбросить свою учетную запись только с адреса электронной почты). Все они добавляют небольшой дополнительный слой, но также увеличивают запросы на поддержку (забытое имя пользователя и т. Д.). – eckes

+0

Спасибо за ответ, ребята! @ Robby Cornelissen, Не могли бы вы объяснить немного больше о SMTP/S? Я пытался исследовать это, не было достаточной справки. – kyle

ответ

2

Это несколько безопасно, хотя это тост, если электронная почта пользователя была скомпрометирована.

Я предпочитаю использовать URL-адрес HMAC, что позволяет избежать хранения токенов в БД.

Если вы указываете IP-адрес пользователя в URL-адресе и в HMAC, вы можете быть уверены, что ссылка на сброс происходит от того же компьютера (на самом деле маршрутизатора), который запросил сброс, и что он не может быть разделен ,

Вместо IP вы можете установить device cookie с именем пользователя/электронной почтой и HMAC, а затем проверить это, когда ссылка на сброс приходит из письма.

Система должна запросить у пользователя ответ на секретный вопрос после того, как он нажмет на ссылку. Еще лучше, отправьте SMS на свой мобильный телефон с коротким случайным кодом и попросите об этом. Это называется https://en.wikipedia.org/wiki/Multi-factor_authentication

Затем отобразите форму смены пароля (по протоколу HTTPS, конечно).

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

Кроме того, используйте локальное реле MTA или асинхронную электронную почту, чтобы хакер не смог определить, отправили ли вы сообщение электронной почты (медленный ответ указывает, что пользователь существует).

+0

благодарит за полезный ответ! Я рассмотрю все упомянутые вами факторы! – kyle

Смежные вопросы