Утерянные записи управления сеансами в базе данных.Как решить проблему?Риск стабильности БД - PullRequest
0 голосов
/ 25 июня 2018

У меня есть веб-приложение, которое использует постоянные файлы cookie, чтобы позволить пользователю оставаться в системе.

Я использую Улучшенный файл cookie для постоянного входа .https://www.programering.com/a/MDO0MzMwATA.htmlhttps://www.experts -exchange.com / questions / 29006560 / selector-validator-cookies.html

Когда пользователь входит в систему через форму LOGIN и просит запомнить, я генерируюrandom selector и random token и добавьте их в таблицу с именем Session в моей БД вместе с userID и другими значениями (IP, время, браузер, что угодно).Я также установил cookie с именем KeepMeLoggedIn со значением selector:token и истекает через 30 дней.

Когда пользователь возвращается на сайт (до или после истечения PHP-сеанса / воспламенителя кода истек) Я проверяю переменную $_SESSION, если ничего не найдено, я ищу свой KeepMeLoggedInпеченье.Если файл cookie возвращает значение, я проверяю его по таблице Session, чтобы узнать, совпадают ли selector и token.Если они совпадают, я сбрасываю token и сохраняю его обратно в БД, и cookie обновляется до нового значения selector:token, и процесс входа в систему завершается.

Когда пользователь выходит из системы, я уничтожаю cookie и session и удаляю запись в БД для selector.

Все это прекрасно работает, кроме случаев, когда пользовательудалил куки вручную.Запись в моей таблице Session осиротела.При тестировании моей системы я обнаружил более 50 записей в моей таблице Session, которые были из файлов cookie, которые я вручную удалил при тестировании логики.Поскольку я удалил cookie вручную, selector не был доступен для кода, который будет удален / удален из БД Session.

Так вот мой вопрос 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 записей с течением времени ??

...