Нужно хэшировать проверочный URL по электронной почте?

У меня есть форма, которая собирает основную информацию о пользователе. На следующей странице он просит пользователя ввести "проверочный" код, чтобы убедиться, что он имеет доступ к указанной учетной записи электронной почты.

Кроме того, в случае, если кто-то случайно покинет сайт, прежде чем ввести свой код проверки, я предоставлю ссылку с уникальной переменной $_GET, чтобы они могли проверить свой адрес электронной почты.

Пара вопросов:

  1. Есть ли какой-либо вред в хранении кода проверки на обычном сайте (скажем, код 12345) рядом с адресом электронной почты клиента в базе данных?
  2. Нужно ли 'хэшировать' переменную 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 и забудьте об этом! Вы можете сохранить его в другой таблице, если пожелаете. Нет необходимости хешировать это.

Другие вопросы по тегам