Задать вопрос

Верно ли я понимаю безопасный подход к управлению сессиями?

Доброго дня.
Не секрет, что стандартный механизм сессий не предоставляет защиты, что вызывает необходимость ее создания. В статье от php-коммьюнити предлагается управлять сессиями на базе временных меток. Что это значит?

Я понимаю это следующим образом (само собой, strict_mode для сессий включен):
- создается таблица sessions, туда пишется каждая сессия залогиненного пользователя, ассоциированная с ним, + время ее создания.
- если произошел разрыв связи, сеанс нарушен, ждем 5-7 минут перед тем, как пометить сессию неактивной, если пользователь появляется в это время, восстанавливаем сессию
- сессионные cookie живут только один сеанс (имеется в виду сеанс работы браузера), собственно сессии на сервере живут как можно меньшее время
- id сессии меняется каждые 15-30 минут в течение сеанса, пишется в БД, старые ID помечаются как неактивные
- сессии, помеченные неактивными, удаляются из БД только если файл сессии удален сборщиком мусора
- соответственно, пресекаем попытки постучаться с сессией, которая уже есть в БД и помечена как неактивная
- так же пресекаем попытки постучаться с сессией, которой в БД нет (если все новые ID создаются сервером, это наверняка атака)

Корректен ли такой подход к управлению сессиями, или я что-то упустил \ неверно понял?
Заранее спасибо.
  • Вопрос задан
  • 863 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 3
Stalker_RED
@Stalker_RED
Мануал не читай @ велосипед изобретай!

Все сессии и так имеют метку с временем последнего доступа. Время создания тоже можно запомнить, но зачем?
Сессии и так можно хранить в базе.
Вы и так можете менять sessionid.
Время жизни сессии и так настраивается.

Впрочем, допустим, вы изобрели что-то новое. Расскажите подробнее что такое, по вашему, сеанс связи, и что значит "все сессии живут только один сеанс".
Ответ написан
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
Почти всё что описали и так стандартная работа сессий.
К безопасности это добавляет примерно ничего.

Если вам нужна защита конкретно от угона сессий(хотя 99% сайтов работают и без этого,т.к. никому не упали).
Нужно в коде делать проверку по IP и/или браузеру(useragent).
И опять же это всё на сам механизм сессий-то никак не влияет. Тупо в той же сессии хранить хеш ip/браузера и в случае несовпадения сессию "разлогинивать" из под пользователя, удалять её нигде и чистить не надо, всё уже сделано за вас.
Кроме этого защиты ничего не прибавит.
Ответ написан
Комментировать
Есть альтернативный способ, не требующий хранения сессий - генерировать случайный идентификатор добавлять id пользователя, временную метку и подпись сервера (например hash(session+id_пользователя +версия_пользователя+timestamp+secret), на получении запроса - проверять подпись сервера, периодически обновлять сессию со свежим таймстампом при активности пользователя, выдавать ему новую со свежим таймстампом. Версия пользователя нужна чтобы иметь возможность принудительно терминировать сессии пользователя, например при смене пароля.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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