это хотя бы слегка безопасный код php? - PullRequest
1 голос
/ 17 апреля 2009

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

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

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

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

РЕДАКТИРОВАТЬ: я использую PDO и prepare () вместе с вышеуказанным методом. Это обо мне позаботится?

Ответы [ 3 ]

10 голосов
/ 17 апреля 2009

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

array_map(mysql_real_escape_string, $_POST);

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

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

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

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

3 голосов
/ 17 апреля 2009

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

1 голос
/ 17 апреля 2009

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

...