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

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

Мой вопрос не в самом программировании, а в том, как правильно создать ссылку? Хеширование было мыслью, но это один из способов. Должен ли я что-то шифровать? Кто-нибудь, кто был поставлен перед этой же задачей, имеет какое-либо представление?

Есть ли способ сделать это, чтобы оба: не хранили секретный код в базе данных, не помещали очевидную информацию о пользователе в строку запроса

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


person chiliNUT    schedule 21.10.2013    source источник
comment
проверьте это здесь stackoverflow.com/questions/876139/   -  person pregmatch    schedule 21.10.2013
comment
Самый безопасный способ сделать то, что вы сказали, - использовать глобально уникальный идентификатор (GUID, UUID, каким бы ни был псевдоним). В PHP есть функция с именем uniqid(), которая делает что-то подобное. С другой стороны, MySQL имеет функцию с именем UUID(). Лично , я бы использовал функцию MySQL, чтобы создать UUID(), присвоить ее записи, а затем использовать ее для отправки в качестве идентификатора активации.С другой стороны, с точки зрения скорости гораздо эффективнее использовать uniqid() PHP, поскольку он короче и индексирует это будет более эффективно.   -  person N.B.    schedule 21.10.2013
comment
Обновление: о том, чтобы НЕ хранить что-либо в базе данных - это возможно. Вы можете каким-то образом зашифровать идентификатор, но тогда вы рискуете возможной поломкой вашего метода шифрования. Может быть достаточно выбрать один из алгоритмов AES и хороший ключ. Таким образом, вы не будете хранить дополнительные данные (ссылку для активации), но у вас возникнет проблема, как безопасно отправить зашифрованные данные. Вы можете использовать base64_encode для шифрования идентификатора. Другая идея состоит в том, чтобы иметь дополнительный столбец (или таблицу, сопоставленную с записями) и использовать глобально уникальные идентификаторы, которые вы отправляете по электронной почте.   -  person N.B.    schedule 21.10.2013


Ответы (1)


Я делал это раньше, выполняя и md5 для объединенного идентификатора записи и адреса электронной почты. Вы можете добавить несколько дополнительных символов или полей, если хотите. Затем, когда пользователь щелкает ссылку, вы просто снова запускаете тот же выбор, чтобы увидеть, есть ли совпадение.

// generate the key
select md5(concat(id,email,'Some custom text')) as `verification_key` from ...

// verify the user
select * from user where '$verifikation_key' = md5(concat(id,email,'Some custom text'));

Затем вы можете обновить запись пользователя, чтобы пометить ее как проверенную.

person 695Multimedia    schedule 21.10.2013
comment
Спасибо, наша старая система не подошла к столу для активации, поэтому я пытался избежать этого, но у меня это должно работать нормально. - person chiliNUT; 22.10.2013