Я передаю некоторые простые пользовательские данные в базу данных mysql.
PHP urlencode () Возвращает строку, в которой все не-буквенно-цифровые символы, кроме -_. были заменены знаком процента (%), а затем двумя шестнадцатеричными цифрами.
Я не беспокоюсь о том, что пространства превращаются в плюсы или другие проблемы с форматированием. Я также не беспокоюсь о XSS и других хаках HTML.
Я считаю, что я должен быть в безопасности от атак типа «и».
ВОПРОС: Существуют ли другие типы SQL-атак, которые можно использовать с – или _ или. ?
ПРИМЕР:
mysql_query("UPDATE cars SET color = '".urlencode($c)."' WHERE garage = 29");
Заранее спасибо
urlencode()
имеет ничего общего с SQL, поэтому он делает столько же, чтобы предотвратить инъекцию SQL, как керосин, чтобы сделать ваши гамбургеры более вкусными. Кроме того, все, что входит в вашу базу данных, будет закодировано в URL, которое затем нужно декодировать, если вы хотите сделать что-нибудь полезное с ними после извлечения базы данных.
С другой стороны, избавление от ваших запросов помогает вашему приложению защититься от SQL-инъекций и не более того. Он не изменяет данные, которые вы вводите в свои запросы; он защищает ваши запросы от несанкционированного доступа. Это идея SQL-инъекции, и именно поэтому URL-кодирование ваших данных не делает ничего для защиты от него. Разумеется, он превращает ваши апострофы в %27
, делая их безвредными, но, как упоминалось в предыдущем абзаце, вам придется преобразовать их в апострофы, чтобы их использовать.
Используйте правильный инструмент для правильной цели. Особенно в 2011 году вы должны использовать подготовленные инструкции вместо того, чтобы вручную избегать переменных запроса и объединять строки для формирования запросов.
Нет. На самом деле опасно использовать кодировку url для защиты SQL-инъекций.
Я не думаю, что только urlencode
будет достаточно хорош, чтобы остановить SQL-инъекцию. Вам придется использовать mysql_real_escape_string
или prepared statements from PDO.
,
Используйте PDO и параметризованные запросы.