Мастера, всем доброго времени суток! Вопрос такой возник, хочется узнать ваше мнение.
При записи какой-либо текущей информации мы все привыкли пользоваться базой данных или cookies. Однако, как это ни парадоксально, такую информацию, как, например, последние просмотренные товары, вполне возможно хранить в файле сессии, и этим пользуются за рубежом, а у нас, почему-то, нет. То есть, файл сессии на сервере можно использовать как базу данных для временного хранения информации. Вопрос такой: насколько это безопасно? Приведу пример записи массива в сессию:
$_SESSION['looked'][] = '<a title="'.$nazv.'" href="page.php?mod=cat&catalog_id='.$catalog_id.'&tovar_id='.$tovar_id.'"><img src="img/tovar/sm_'.$picture.'"></a>';
Это лишь часть кода. Как видим, я пишу полный адрес с тегами и переменными (переменные перед этим проверяются). Кто что скажет по этому поводу? Время жизни- до момента закрытия арбузера, мне этого достаточно для данных целей. Меня интересует лишь вопрос безопасности: можно ли вписать какую-либо гадость в сессию на данном примере? И как это можно будет использовать?
пиши, хотя лучше юзеру записывать в куки номера товаров, чтобы в след раз когда зайдёт остались данные.
03 Июн 2013, 8:25wapmorgan, в большинстве случаев так было бы лучше, согласен. Однако, для небольшого каталога, для которого я это делал- в самый раз. Меня волнует лишь сторона безопасности.
03 Июн 2013, 9:17Сессия не длительное хранилище, и в любой момент нужно данные потерять.
Я бы не использовал сессию так, как ты.
Пользователь доступа к сессии не имеет, это только внутреннее хранилище, в которое можешь записывать данные только ты.
НО! Любые данные, которые ты от пользователя получаешь и вписываешь в сессию нужно проверять на валидность и фильтрировать (то есть, все $_POST и $_GET нужно все равно проверять)
u99, Потому что, если ты запишешь не фильтрованные данные в сессию, то можно получить xss при выводе информации из сессии...
Я с печеньками не очень дружу, поэтому легче было сделать на сессии Данные фильтруются еще до вызова страницы, и если вызов прошел успешно, то только после этого идет запись в сессию.
добавлено спустя 4 минуты:
Кстати, вопрос чуть не в тему: если я путем несложных манипуляций получил при вызове страницы ошибку типа MySQL Syntax Error: check the manual... - это была уязвимость?
UPD: Разобрался. Это была именно уязвимость из-за недостаточной фильтрации данных.
Нет, это не уязвимость. Это ошибка синтаксиса в запросе.
MySQL не определяет уязвимости.