Безопасен ли такой механизм remember me?

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

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

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

Кто что думает по этому поводу? Что надо здесь реализовать, чтобы получить разумно-максимальную защиту от взлома?
  • Вопрос задан
  • 631 просмотр
Пригласить эксперта
Ответы на вопрос 3
@vilgeforce
Раздолбай и программист
base64 легко опознается визуально - можете не париться. По длине хэша можно получить список алгоритмов, которые дают ту же длину.
Как только плохой парень зарегается и увидит в своих кукисах хэш от "12345", то есть своего пароля, он будет знать принцип хэширования и спокойно сможет подбирать пароль по украденным кукисам. Отсутствие ограничений на число авторизаций по кукам - тож плохо
Ответ написан
Комментировать
@kedavra
code berserker
>в кукиз еще записывается ID пользователя и хеш его пароля
Зачем именно хеш пароля, запишите туда хеш случайной белиберды и храните его в отдельном поле в users.
Ответ написан
Комментировать
abler98
@abler98
Software Engineer
Можно создавать хэш из ip пользователя+user agent и записывать его в отдельное поле, ну а в куки достаточно писать id пользователя и еще какой-то ключ, который тоже должен быть записан в отдельном поле (чтоб случайно не совпало ничего)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы