Является urlencode () достаточно хорошим, чтобы остановить все атаки SQL-инъекций в 2011 году

Я передаю некоторые простые пользовательские данные в базу данных mysql.

PHP urlencode () Возвращает строку, в которой все не-буквенно-цифровые символы, кроме -_. были заменены знаком процента (%), а затем двумя шестнадцатеричными цифрами.

Я не беспокоюсь о том, что пространства превращаются в плюсы или другие проблемы с форматированием. Я также не беспокоюсь о XSS и других хаках HTML.

Я считаю, что я должен быть в безопасности от атак типа «и».

ВОПРОС: Существуют ли другие типы SQL-атак, которые можно использовать с – или _ или. ?

ПРИМЕР:

mysql_query("UPDATE cars SET color = '".urlencode($c)."' WHERE garage = 29"); 

Заранее спасибо

Related of "Является urlencode () достаточно хорошим, чтобы остановить все атаки SQL-инъекций в 2011 году"

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

С другой стороны, избавление от ваших запросов помогает вашему приложению защититься от SQL-инъекций и не более того. Он не изменяет данные, которые вы вводите в свои запросы; он защищает ваши запросы от несанкционированного доступа. Это идея SQL-инъекции, и именно поэтому URL-кодирование ваших данных не делает ничего для защиты от него. Разумеется, он превращает ваши апострофы в %27 , делая их безвредными, но, как упоминалось в предыдущем абзаце, вам придется преобразовать их в апострофы, чтобы их использовать.

Используйте правильный инструмент для правильной цели. Особенно в 2011 году вы должны использовать подготовленные инструкции вместо того, чтобы вручную избегать переменных запроса и объединять строки для формирования запросов.

Нет. На самом деле опасно использовать кодировку url для защиты SQL-инъекций.

  1. Кодирование URL – это процентное кодирование. И % символов в SQL имеют особое значение во многих базах данных . Пример: предложения LIKE. Разрешение% символов в динамическом SQL все равно приведет к проблемам.
  2. Существует риск того, что промежуточные (веб-серверы) могут автоматически декодировать URL. Apache может это сделать.

Я не думаю, что только urlencode будет достаточно хорош, чтобы остановить SQL-инъекцию. Вам придется использовать mysql_real_escape_string или prepared statements from PDO. ,

Используйте PDO и параметризованные запросы.