У меня есть веб-приложение, которое использует постоянные файлы cookie, чтобы позволить пользователю оставаться в системе.
Я использую Улучшенный постоянный логин cookie метод.
https://www.programering.com/a/MDO0MzMwATA.html
https://www.experts-exchange.com/questions/29006560/selector-validator-cookies.html
Когда пользователь входит в систему через форму LOGIN и просит запомнить, я генерирую случайный selector
и случайный token
и добавить их в таблицу под названием Session
в моей БД вместе с userID
и другие значения (IP, время, браузер, вода). Я также установил печенье называется KeepMeLoggedIn
со значением selector:token
и истекает через 30 дней.
Когда пользователь возвращается на сайт (до или после PHP Сессия / Кодовый Igniter истек) я проверяю $_SESSION
переменная, если ничего не найдено, я ищу KeepMeLoggedIn
печенье. Если cookie возвращает значение, я проверяю его по Session
таблица, чтобы увидеть, если selector
а также token
матч. Если они совпадают, я сбрасываю token
и сохранить его обратно в БД и cookie
обновляется до нового selector:token
значение и процесс входа в систему завершается.
Когда пользователь выходит из системы, я уничтожаю cookie
а также session
и удалите запись в БД для selector
,
Все это прекрасно работает, за исключением случая, когда пользователь удалил куки вручную. Запись в моем Session
стол осиротел. При тестировании моей системы я получил более 50 записей Session
таблицу, которая была из куки, которую я вручную удалил при тестировании логики. Так как я вручную удалил куки selector
был недоступен для кода, который будет удален / удален из Session
DB.
Вот мой вопросs:
1) Каков подход к использованию этих осиротевших записей?
Моя первая мысль — просто очистить таблицу сеансов от любой даты старше, чем выбранная дата окончания срока действия для Remember Me
функция, когда пользователь входит в систему, или в хрон-задании, или всякий раз, когда
Есть ли здесь другие идеи?
2) Является ли это уязвимостью в общей модели, которая может позволить хакеру:
create an account on a website
x=1
while x <2
-> login and ask to be remembered
-> delete the cookie
do();
И в конечном итоге заполняют таблицу сессий веб-сайта до тех пор, пока сайт не будет закрыт, добавив 1000 и 1000 записей с течением времени ??
Задача ещё не решена.
Других решений пока нет …