Как я могу походить на типичную процедуру «подтверждения учетной записи», наблюдаемую на нескольких сайтах? - PullRequest
3 голосов
/ 12 сентября 2010

Я хочу напоминать типичную процедуру «подтверждения учетной записи», которую можно увидеть на нескольких сайтах. Когда пользователь регистрируется, ему отправляется электронное письмо со ссылкой для подтверждения. Когда пользователь переходит по этой ссылке для подтверждения, его учетная запись подтверждается. Не беспокойтесь о процессе отправки электронной почты . Дело в том, что мне нужно сгенерировать URL-адрес, по которому пользователь может войти, чтобы подтвердить свой новый аккаунт. Эта страница должна получить некоторые параметры, но я не хочу, чтобы URL-адрес был что-то вроде ... / подтверждения? UserId = 1. Я хочу, чтобы это был зашифрованный URL, чтобы избежать злоупотреблений, возможно ли это? Пока что у меня что-то вроде этого:

 public class CancelReservationPage extends WebPage{

 public CancelReservationPage(PageParameters pageParameters){
  // get parameters
  // confirm account
  // etc..
 }
}

Что дальше?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 12 сентября 2010

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

Создание URL-адреса, содержащегоuserId и hash(userId + secretKey), где secretKey - это уникальный ключ вашего приложения, а hash - это что-то вроде SHA-1.Таким образом, злоумышленник не может вычислить хеш, если он не знает секретный ключ, и вы можете проверить запрос на подтверждение, сравнив входящий хеш с вновь вычисленным.

SHA-1 можно вычислить с помощью java.security.MessageDigest или кодек Apache Commons DigestUtls.shaHex().

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

2 голосов
/ 12 сентября 2010

Вам не нужно шифрование, лучше сделайте ваш параметр полностью независимым.Просто сгенерируйте случайную строку, например длиной 12 символов, которую вы храните в БД в пользовательской таблице.

1 голос
/ 12 сентября 2010

Довольно просто:

  1. перед отправкой электронного письма создайте уникальный ключ (серия символов, самым простым будет GUID)
  2. сохранить этот уникальный ключ в базе данных и связать его с связанная учетная запись пользователя
  3. включить этот ключ в качестве параметра в URL подтверждения учетной записи, отправленный по электронной почте
  4. в коде страницы подтверждения учетной записи, проверьте базу данных, чтобы увидеть, полученный код действительно сгенерированный вашим кодом
  5. если ключ находится в вашей базе данных, активируйте учетную запись
...