Chvanikoff
@Chvanikoff

Вопрос безопасности записи данных в сессию без фильтрации в php?

Здравствуйте!


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

А с другой — хотелось бы пример реальной угрозы от записи в сессию данных, например, посредством обращения к нефильтрованному _GET массиву (без определенного места использования — интересно наличие уязвимости именно на уровне добавления данных, а не чтения из сессии):
Session::instance()->set('somedata', $_GET['somevar']);



P.S.: вопрос исключительно любопытства ради и к реальным проектам отношения не имеет.
  • Вопрос задан
  • 2939 просмотров
Пригласить эксперта
Ответы на вопрос 5
@WikiLeaks
На 98% серверов PHP хранит сессии в строго определенных папках (вариантов 10 всего, максимум), и в 99% с именем sess_[a-z0-9]+.
Если писать в сессию не фильтрованные данные, то можно сохранить на диск сервера. например веб-шелл, и при наличии local-include уязвимости, можно будет его исполнить.
Т.е сама по себе запись произвольных данных в сессию угрозы не представляет, но может быть использована для эксплуатирования других уязвимостей.

Обычно инклудяд log-файлы (предварительно оставив там вредоносный код), но они очень часто не доступны для чтения с правами php.
А вот подобрать путь до файла-сессии очень просто, а значит это облегчает потенциальный взлом.
Ответ написан
Комментировать
7workers
@7workers
Есть граница, за которой весь код счетает данные безопасными. При пересечении границы данные нужно фильтровать. Конкретно c сессиями в PHP может случится то, что решив хранить их в базе получите инъекцию.
Ответ написан
Комментировать
AFoST
@AFoST
Вот тут почитайте пункт ==[2]== Сессии. Может, поможет.
Ответ написан
Gibbzy
@Gibbzy
Да ничего страшного вроде как произойти не должно, ну напишут туда вам всякую каку, ну будет она там в виде строки хранится. Вопрос конечно в том как эта строка потом использоваться будет, но если на уровне записи — я думаю что безопасно все.

Другой вопрос что фильтровать то все лучше на входе.
Ответ написан
MpaK999
@MpaK999
Буду!
Смотря кто будет вашим обработчиком сессий (как пример php.ini — session.save_handler)
Например если вы решитесь хранить данные сессии в Базе Данных, например MySQL или Postgre, то хорошо бы данные всё же фильтровать от SQLinjection, в самом классе сессий или же в обработчике запроса.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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