Должен ли я экранировать входные параметры один за другим или избежать запроса sql в целом? - PullRequest
2 голосов
/ 16 ноября 2011

Я часто экранирую вводы один за другим, и меня интересует разница между двумя методами.Какой из них является более распространенной практикой?Сначала я попытался экранировать поля «требовать экранирования», а потом написал длинный код для каждого значения.Каковы недостатки одновременного отказа от целого предложения SQL?

Ответы [ 6 ]

3 голосов
/ 16 ноября 2011

Это не работает, потому что внутри запроса вы используете такие вещи, как 'одинарные кавычки, чтобы указать значения, и вы не хотите, чтобы они экранировались, но вы хотите экранировать значения, которые могут содержать одинарные кавычки.

1 голос
/ 16 ноября 2011

Несколько оффтоп, но я чувствую, что это очень важно.

Это не первый ваш вопрос по этому вопросу. И, кажется, вы все еще не поняли.

Вы уверены, что mysql не принимает экранированные строки sql?

Прошу прощения, но кажется, этот вопрос является вашей главной проблемой.
Вместо того чтобы искать понимание, вместо того, чтобы искать объяснение, вы просто спрашиваете какой-то положительный ответ.

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

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

0 голосов
/ 16 ноября 2011

Вас беспокоит длинный код для экранирования каждой переменной, но по какой-то причине вы забыли назначение функции.

function escape_me($value) {
     $value = strip_tags($value);
     $value = mysql_real_escape_string($value);
     .........
}

$var1 = escape_me($_POST['var1']);

Надеюсь, это направит вас в правильном направлении.

0 голосов
/ 16 ноября 2011

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

aaa

пользователь введет

a", "a

, поэтому в сгенерированном SQL вы получите

("a", "a") 

вместо

("aaa")

Я думаю, что экранирование всего оператора SQL не будет работать в такой ситуации.

0 голосов
/ 16 ноября 2011

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

0 голосов
/ 16 ноября 2011

Полагаю, экранирование строки sql более выгодно при использовании mysql_real_escape_string. Что касается времени и памяти. Некоторые проверки могут быть выполнены на каждом входном уровне, если это необходимо.

...