Xwab
Форумыnavigate_nextНебольшие вопросы по PHP/MySQL

Безопасность записи в сессию
Сообщения
Pisatel

Мастера, всем доброго времени суток! Вопрос такой возник, хочется узнать ваше мнение.
При записи какой-либо текущей информации мы все привыкли пользоваться базой данных или cookies. Однако, как это ни парадоксально, такую информацию, как, например, последние просмотренные товары, вполне возможно хранить в файле сессии, и этим пользуются за рубежом, а у нас, почему-то, нет. То есть, файл сессии на сервере можно использовать как базу данных для временного хранения информации. Вопрос такой: насколько это безопасно? Приведу пример записи массива в сессию:
$_SESSION['looked'][] = '<a title="'.$nazv.'" href="page.php?mod=cat&amp;catalog_id='.$catalog_id.'&amp;tovar_id='.$tovar_id.'"><img src="img/tovar/sm_'.$picture.'"></a>';
Это лишь часть кода. Как видим, я пишу полный адрес с тегами и переменными (переменные перед этим проверяются). Кто что скажет по этому поводу? Время жизни- до момента закрытия арбузера, мне этого достаточно для данных целей. Меня интересует лишь вопрос безопасности: можно ли вписать какую-либо гадость в сессию на данном примере? И как это можно будет использовать?

30 Май 2013, 11:43
Pisatel

Неужели никто не делал подобных экспериментов?

03 Июн 2013, 6:19
wapmorgan

пиши, хотя лучше юзеру записывать в куки номера товаров, чтобы в след раз когда зайдёт остались данные.

03 Июн 2013, 8:25
Pisatel

wapmorgan, в большинстве случаев так было бы лучше, согласен. Однако, для небольшого каталога, для которого я это делал- в самый раз. Меня волнует лишь сторона безопасности.

03 Июн 2013, 9:17
u99

да ничего опасного нет на мой взгляд

03 Июн 2013, 9:21
Akdmeh

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

Пользователь доступа к сессии не имеет, это только внутреннее хранилище, в которое можешь записывать данные только ты.
НО! Любые данные, которые ты от пользователя получаешь и вписываешь в сессию нужно проверять на валидность и фильтрировать (то есть, все $_POST и $_GET нужно все равно проверять)

03 Июн 2013, 9:58
u99

Akdmeh, Почему нужно проверять эти данные?
Паранойа?

03 Июн 2013, 10:25
SL_NeKrOmAnT

u99, Потому что, если ты запишешь не фильтрованные данные в сессию, то можно получить xss при выводе информации из сессии...

03 Июн 2013, 14:53
Pisatel

Я с печеньками не очень дружу, поэтому легче было сделать на сессии Данные фильтруются еще до вызова страницы, и если вызов прошел успешно, то только после этого идет запись в сессию.
добавлено спустя 4 минуты:
Кстати, вопрос чуть не в тему: если я путем несложных манипуляций получил при вызове страницы ошибку типа MySQL Syntax Error: check the manual... - это была уязвимость?
UPD: Разобрался. Это была именно уязвимость из-за недостаточной фильтрации данных.

03 Июн 2013, 15:53
SL_NeKrOmAnT

Нет, это не уязвимость. Это ошибка синтаксиса в запросе.
MySQL не определяет уязвимости.

03 Июн 2013, 19:49
Ответить на тему