За последние 24 часа нас посетил 22591 программист и 1590 роботов. Сейчас ищет 841 программист ...

Хеш в куки авторизации

Тема в разделе "PHP для новичков", создана пользователем DarkSagittarius, 11 фев 2017.

  1. DarkSagittarius

    DarkSagittarius Активный пользователь

    С нами с:
    1 апр 2012
    Сообщения:
    32
    Симпатии:
    2
    Пишу сейчас регистрацию авторизацию на сайте и столкнулся с такими непонятками: при успешной авторизации я записываю в куки id юзера и хеш авторизации (двойной md5 от uniqid). Всё вроде хорошо работает, но столкнулся с проблемой: при авторизации с другого браузера хеш генерируется заново, следовательно в первом браузере авторизация не валидная. Как правильно сделать? Хранить массив хешей и делать поиск по массиву каждый раз или просто если хеш уже сгенерирован, то ставить его во все браузеры и удалять из БД только при логауте юзера?
     
  2. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Если допустима одна сессия - её идентификатор можно хранить прямо в таблице пользователей. Если допустимо много одновременных сессий - нужно вынести в отдельную таблицу с парами токен-пользователь.
     
    DarkSagittarius нравится это.
  3. DarkSagittarius

    DarkSagittarius Активный пользователь

    С нами с:
    1 апр 2012
    Сообщения:
    32
    Симпатии:
    2
    @Ganzal ага, т.е. хранить множество хешей для каждого пользователя, а при смене пароля тереть все, так? Какие ещё сценарии я могу упустить по неопытности?
     
  4. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Только не хэшей, а токенов. И необязательно двойной md5 от уникального идентификатора. Лучше вообще рандомную строку через openssl.
     
  5. DarkSagittarius

    DarkSagittarius Активный пользователь

    С нами с:
    1 апр 2012
    Сообщения:
    32
    Симпатии:
    2
    А это принципиально другое название? Всегда думал, что это одно и то же по сути.
    Сейчас погуглил, это отдельное расширение для php? Его можно на обычном хостинге поставить? И потом без SSL сертификата оно работает?
     
  6. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    Ну если будет проблема поставить, сгенерируй случайную строку сам. Например,
    PHP:
    1. md5(uniqid("", true));
    Никаких сертификатов для генерации случайной строки не нужно
     
  7. DarkSagittarius

    DarkSagittarius Активный пользователь

    С нами с:
    1 апр 2012
    Сообщения:
    32
    Симпатии:
    2
    ну я сейчас использую вот так:
    PHP:
     
  8. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.598
    Симпатии:
    1.764
    А второй md5 нафига? Чтоб по радужной таблицы md5 текущего времени в миллисекундах не подобрали? Таких таблиц не существует. Ну да, просто пихаешь это в базу, как @Ganzal сказал, и радуешься
     
  9. Ganzal

    Ganzal Суперстар
    Команда форума Модератор

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    Это разное по сути. Токен это некоторая строка, идентифицирующая что-то. В твоем случае по ней будет найден пользователь в таблице сеансов. Хэш же подразумевает наличие некоторых исходных данных, которые будут обработаны тем же методом хэширования, и полученное значение будет сравниваться с предоставленным для проверки изменений в этих исходных данных.

    Ты называешь это хэшем потому что хэшировал результат выполнения функции. Но ты не сможешь получить из той функции ту же произвольную строку, повторно её хэшировать и сравнить с хэшем, пришедшим от пользователя. Следовательной твой хэш - просто произвольная строка. Она перестает быть сразу в момент "генерации" ибо на входе у тебя генератор случайных данных. Но она в твоей системе помогает в идентификации пользователя. Следовательно это токен.

    Для openssl_random_pseudo_bytes() сертификата не нужно. Что такое "обычный хостинг" - я не знаю. Но с учетом огромного давления всяких корпораций на защиту данных - пхп на нормальном хостинге собирается с этим расширением. Но то нормальные хостинги. За "обычные" говорить не могу.
     
    DarkSagittarius нравится это.