пишу авторизацию для сайта на php. Возник вопрос по поводу безопасности при реализации функции "запомнить меня. Есле вкратце, то пользователю выдаются cookie с токеном, который сформирован методом:
$bytes = random_bytes(rand(150, 267));
$token = bin2hex($bytes);
Сохраняем его в базу данных и выдаём пользователю. При последующей идентификации сверяется токен и пользователь авторизован.
Вопрос такой, возможно ли методом перебора комбинаций несанкционированно авторизоваться на сайте? Может лучше идентифицировать пользователя по двум параметрам: например его id в базе данных и сформированному токену?
Используй rand_int вместо rand. Я так авторизацию делаю:
пароль соленый. Сессии храню в бд. Значение сессии - просто рандомная строка (в бд тип "binary" - для регистра). Используются транзакции бд с проверкой на существование, т.к. коллизию никто не отменял. Еще для надежности нужна привязка сессии к маске ip и периодическая смена значения сессии. В общем, есть некоторые тонкости в разработке системы авторизации. С ходу хорошо не сделать. Защиту от перебора можно сделать. Просто записываешь в бд обращения с несуществующей сессией. Если таких слишком много - делаешь бан какой-нибудь.
рандомная строка сессии создается из набора 90 символов и длинной в 32 символа. Комбинаций больше чем у md5. Какую-то информацию хранить в значении сессии не стоит, нужно лишь идентифицировать по этому значению. В бд сессий находится этот идентификатор с ссылкой на id юзера.