Генерация ссылок для валидации электронной почты - PullRequest
3 голосов
/ 14 июля 2009

Для веб-приложения я хотел бы создать ссылку для проверки электронной почты и отправить ее пользователю. Как и на многих общедоступных веб-сайтах, пользователь должен щелкнуть его, чтобы подтвердить свой адрес электронной почты. Выглядит примерно так:

http://www.foo.bar/validation?code=421affe123j4h141k2l3bjkbf43134kjbfkl34bfk3b4fkjb43ffe

Кто-нибудь может мне помочь с некоторыми советами о правильном создании этих токенов? Погуглить лучшие практики оказалось сложнее, чем я думал. Ссылки должны:

  • ... не требуется, чтобы пользователь входил первым.
  • ... не раскрывать учетные данные для обеспечения безопасности приложения
  • ... позвольте мне как разработчику эффективно проверять токен. Я почти уверен, что мне нужен способ извлечь идентификатор пользователя из кода, чтобы соответствовать этому критерию. Не так ли?

Кроме того, вы бы выбрали случайный код, который где-то сохранен, или сгенерированный код, который я могу пересчитать для проверки?

Спасибо за любые ответы!

Matthias

P.S. Я работаю с ASP.NET 3.5, на случай, если для этого есть готовая функция.

Ответы [ 4 ]

5 голосов
/ 14 июля 2009

Несколько советов для начала:

  • Использовать GUID
  • Использовать соленый хеш (MD5, SHA1 и т. Д.)
  • Используйте случайную строку символов (чем больше символов, тем меньше вероятность столкновения)
  • Временно сохраните его в базе данных и отметьте его так, чтобы он истек через определенный период времени
2 голосов
/ 14 июля 2009

Я создаю хэш способом, который можно воссоздать:

 code = MD5( my_hash + user_email + register_timestamp )

Затем отправьте ссылку на http://example.com/validation/?code = 4kj34 ....

Валидация выглядит следующим образом:

 SELECT id 
 FROM users 
 WHERE 
   MD5( CONCAT( my_hash, user_email, register_timestamp ) ) = code
   AND activated = 0

Если вы получите один результат, обновите их «активированное» поле и войдите в него. Вы также можете выполнить некоторые математические операции в их поле «register_timestamp» для TTL бедного человека

2 голосов
/ 14 июля 2009

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

Это подтверждает, что они являются правильными лицами, не делая URL-адрес вычисляемым, в то же время делая его устойчивым к атакам по словарю.

1 голос
/ 14 июля 2009

Я бы, наверное, использовал Guid. Просто создайте Guid (вызывая Guid.NewGuid()), сохраните его в качестве токена проверки для этого пользователя и включите его в ссылку проверки.

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