2010-01-23 3 views
5

Должен ли я использовать функцию mysql_real_escape_string() в моих MySQL-запросах для переменных $_SESSION? Теоретически переменные $_SESSION не могут быть изменены конечным пользователем в отличие от $_GET или $_POST переменных справа?

Спасибо :)

ответ

4

Вне зависимости от того, может ли пользователь изменять данные, вы, вероятно, хотите, чтобы избежать его в любом случае, в случае, если вы когда-нибудь нужны данные, чтобы содержать символы, которые нарушают SQL (котировки, и т.д.).

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

+0

Спасибо, Андрей. Могу ли я спросить, что такое «Связанные параметры»? – Lyon

+0

Это средство объявления заполнителей в вашем SQL, а затем отправка значений данных на сервер «вне диапазона», так что они не могут быть интерпретированы как SQL, что исключает возможность SQL-инъекции. См. Например: http://usphp.com/manual/en/function.mysqli-stmt-bind-param.php –

+0

Хм .. Я вижу. После ваших возгласов я начал читать о параметрах привязки и его поддержке в mysqli. В настоящее время я использую ext/mysql, и я считаю, что не поддерживает параметры привязки. Огромное спасибо. Мне нужно будет взять мои запросы о переносе из mysql в mysqli в другой поток (например, используя mysqli без подготовленных операторов). – Lyon

4

Не убегайте/цитируйте/кодируйте текст, пока вы не достигнете нужного вам момента. Внутренние представления должны быть как можно более «сырыми».

+0

+1, точно, о чем я думал. – Inshallah

3

Вы можете ответить на этот вопрос самостоятельно, следуя этой линии рассуждений:

ли значение в $ _SESSION вводятся пользователем?

Если да, то он уже прошел санировку?

+0

Да, это так. Вот почему мне было интересно, нужно ли снова убежать, прежде чем использовать его в инструкции sql. – Lyon

+0

Тогда я бы не скрыл его снова, было бы лучше вставить его в db с минимальной обработкой –

+0

. Я беру на себя это: если вы создаете свой SQL динамически, объединяя данные в него, необходимо дезинфицировать и конкатенацию в том же месте. Должно быть очевидно, что вы правильно строите SQL и тщательно обрабатываете все, просто просматривая код конкатенации. – Inshallah

1

Теоретически $ _SESSION переменные в не могут быть изменены конечным пользователем

Нет, но данные должны быть откуда-то.

Вам следует избегать любых выходных данных PHP, используя метод appopriate для адресата в момент, когда он покидает PHP.

C.

+0

Спасибо symcbean :) Я предполагаю, что «уход из PHP» подразумевает либо mysql, либо запись в файл? Я использовал htmlspecialchars, но теперь исключительно использую filter_var и mysql_real_escape_string для обработки любых данных от пользователей. – Lyon

+0

Уточнение: для обработки ввода от пользователей для использования в mysql, я сначала дезинфицирую вход, затем используйте mysql_real_escape_string. Так что htmlentities (в отличие от htmlspecialchars) будут использоваться, когда я выводю любые данные для отображения в браузере клиента. – Lyon

Смежные вопросы