Вопрос

У меня есть КУЧА переменных $_POST, отправляемых через длинную форму, и вместо жесткого кодирования каждой из них с помощью mysql_escape_string() можно ли мне сделать следующее?Я не знаю, действительно ли это безопасный и/или жизнеспособный код.

foreach ($_POST as &$post_item){
    $post_item = mysql_escape_string($post_item);
}

Я вполне уверен, что, поскольку я использую &, он передает его по ссылке, а не по значению, поэтому я фактически меняю значение в $_POST.

Кроме того, следует ли мне использовать mysql_real_escape_string() вместо?

РЕДАКТИРОВАТЬ:Я использую PDO и подготовить() вместе с описанным выше методом.Поможет ли это мне?

Это было полезно?

Решение

Почему бы не использовать array_map()?

array_map(mysql_real_escape_string, $_POST);

Но на самом деле вам следует использовать параметризованные/подготовленные операторы.

mysql_real_escape_string() учитывает текущий набор символов базы данных, mysql_escape_string() не.Таким образом, первое является лучшей альтернативой по сравнению с этим.

Изменить (после редактирования ОП к вопросу):

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

Другие советы

Да, вам следует использовать mysql_real_escape_string(), если вы собираетесь пойти по этому пути.Но правильный способ убедиться, что переменные можно безопасно отправлять в базу данных, — использовать Параметризованные запросы которые предоставляются в PHP либо через MySQLi функции или ПДО.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top