Нужно ли избегать $ _SESSION перед тем, как войти в SQL-запрос?

Мне интересно, если что-либо из массива $ _SESSION нужно экранировать, прежде чем использовать его в SQL-запросе.

Обратите внимание, что я не использую файлы cookie в своем приложении, так как я слышал, что они могут использоваться для захвата сеанса (?)

большое спасибо

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

Даже если это данные, которые вы извлекли из своей базы данных.

Исходя из предположения, что еще предстоит выявить эксплойты в PHP, все должно быть экранировано с помощью подготовленных операторов или mysql_real_escape_string, прежде чем вы позволяете что-либо касаться вашей базы данных.

Данные, хранящиеся в $ _SESSION, не всегда чисты. Для многостраничных форм вы можете хранить ввод пользователя в $ _SESSION до последней страницы, когда вы записываете все это в базу данных. Если вы столкнетесь с какой-либо привычкой думать, что $ _SESSION «чист», вы в конечном итоге попадете в неприятности.

Вы должны абсолютно привыкнуть к тому, что каждая часть данных в вашей системе загрязнена, пока вы не ускользнули от нее. Обратите внимание: если вы используете динамические имена таблиц, экранирование не поможет вам. Никогда не используйте имена таблиц или столбцов в запросе, который когда-либо был рядом с пользователем. Различные экранирующие механизмы не ускользают от обратных сигналов. Если у вас есть подготовленный запрос:

 "SELECT * FROM `:aTable`;" 

и aTable исходит от пользователя, пользователя, который вводит что-то вроде

 ` WHERE id IN (DELETE FROM user); 

потенциально просто удалил все ваши записи пользователя.

Переменная $_SESSION такая же, как переменная $_GET если она используется неправильно, поэтому ответ на ваш вопрос да, если ваш пользователь RAW загружает сеанс (который вы не должны делать), вам нужно будет его избежать ,

Переменные сеанса так же, как и любые другие переменные. Данные там должны откуда-то появиться. если вы прямо храните там размещенные переменные, то это в основном похоже на использование опубликованной переменной.

Единственный различие заключается в том, что переменная сеанса сохраняется в разных доступах, и это связано с этим.

Одно золотое правило никогда не является доверительным пользователем, кроме того, если данные не были получены от вас (т.е. ваша система), его следует рассматривать как «пользовательский ввод», и это, безусловно, включает данные сеанса.

С точки зрения экранирования данных сеанса для SQL вы можете и должны эффективно очищать данные для использования sql, например, используя mysql_real_escape_string (), но в зависимости от того, какие данные содержатся в сеансе, я также проверил бы сессию против того, что вы ожидаете, она должна содержать ,

Не слишком уверен в том, что вы имеете в виду в отношении комментария к хитрому файлу cookie / сессии, я полагаю, вы имеете в виду, что используете только сеанс для хранения данных? В типичных сеансах установки php по-прежнему используют файлы cookie исключительно как указатель на сеанс пользователя.