2013-07-22 2 views
1

От this question мне очень нравится @ woliveirajr отвечает, потому что он решает:Secure системы для проверки адрес электронной почты

  1. как защититься от рилизинга адреса электронной почты, используемый на сайте
  2. проверяет владелец из адрес электронной почты

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

Таким образом, зарегистрировался только владелец электронной почты.

Недостатки:

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

Где я неуверенный в том, как реализовать систему, при которой пользователь может получить доступ только на страницу регистрации при нажатии на ссылку с электронной почтой. Будет ли страница регистрации получать данные, переданные ей с использованием GET, и проверить «код», чтобы узнать, может ли пользователь зарегистрироваться, и этот код меняется каждые 30 минут? Например, ссылка для регистрации по электронной почте может быть mysite.com/register.php?secretcode=as18d, а register.php проверяет «код» as18d, но этот код будет меняться каждые 30 минут. Это идея? Будет ли код генерироваться засоленным хэшем на основе системного времени?

Или вместо электронной почты можно отправить по электронной почте ссылку с несколькими письмами, которые пользователь входит на страницу регистрации для аутентификации, например, как работает захват, но не на самом деле.

ответ

0

Общий подход к этому заключается в использовании неопознанного токена, такого как GUID, встроенный в ссылку, чтобы он передавался с помощью GET. Это должно быть безопасным, так как очень статистически маловероятно, что кто-то будет случайным образом угадывать GUID для любого пользователя, независимо от времени, которое они тратят, пытаясь угадать, поэтому истечение даже не нужно.

Следует отметить, что это должно быть сделано по ссылке SSL, чтобы избежать возможности участия человека в процессе компрометации процесса проверки.

+0

Это функция, которая требуется для создания GUID/UUID? http://php.net/manual/en/function.uniqid.php или следует использовать вместо этого 'openssl_random_pseudo_bytes()'? – Celeritas

+1

Уникальность - это все, что имеет значение, поэтому либо должно быть хорошо, так как получение последовательности значений нецелесообразно. –

0

На стороне сервера нет способа гарантировать, что HTTP-запрос поступает из ссылки в сообщении электронной почты. Вы не можете доверять чему-либо со стороны клиента; все это может быть подделано и манипулировано.

Что вам нужно, это трудно угадать токен. Длинные и случайные - хорошие отправные точки.

Не согласен с AJ по истечении срока действия по нескольким причинам.

  • Если ваш пользователь db становится большим, вы не хотите отслеживать неиспользуемые токены годами и годами.
  • Если кто-то запрашивает токен активации и не использует его через несколько дней, вряд ли они это сделают. Можете также удалить его.