Нужно хэшировать проверочный URL по электронной почте?
У меня есть форма, которая собирает основную информацию о пользователе. На следующей странице он просит пользователя ввести "проверочный" код, чтобы убедиться, что он имеет доступ к указанной учетной записи электронной почты.
Кроме того, в случае, если кто-то случайно покинет сайт, прежде чем ввести свой код проверки, я предоставлю ссылку с уникальной переменной $_GET, чтобы они могли проверить свой адрес электронной почты.
Пара вопросов:
- Есть ли какой-либо вред в хранении кода проверки на обычном сайте (скажем, код 12345) рядом с адресом электронной почты клиента в базе данных?
- Нужно ли 'хэшировать' переменную URL $_GET для проверки? Я думал о том, чтобы просто создать 64-символьную строку, добавить в конец URL-адреса и проверить значение базы данных (снова хранится рядом с адресом электронной почты).
Я бы никогда не сделал то же самое для пользовательских паролей (оставьте их открытыми без хэширования), но в этом случае, какой метод является правильным?
редактировать
похоже, людям нравится идея GUID (хотя я не уверен, насколько она более уникальна, чем, скажем, произвольно сгенерированная строка из 64 символов). Функция, представленная ниже, кажется достаточной?
function getGUID(){
if (function_exists('com_create_guid')){
return com_create_guid();
}else{
mt_srand((double)microtime()*10000);//optional for php 4.2.0 and up.
$charid = strtoupper(md5(uniqid(rand(), true)));
$hyphen = "-";
$uuid = "{"
.substr($charid, 0, 8).$hyphen
.substr($charid, 8, 4).$hyphen
.substr($charid,12, 4).$hyphen
.substr($charid,16, 4).$hyphen
.substr($charid,20,12)
."}";
return $uuid;
}
}
1 ответ
Просто используйте GUID и забудьте об этом! Вы можете сохранить его в другой таблице, если пожелаете. Нет необходимости хешировать это.