удаление всех нечисловых символов эффективно экранирует данные? - PullRequest
1 голос
/ 05 августа 2011

Я использую эту функцию для удаления всех нечисловых значений из поля перед записью в MYSQL дБ:

function remove_non_numeric($inputtext) {return preg_replace("/[^0-9]/","",$inputtext);

Эффективно ли это экранирует входные данные для предотвращения SQL-инъекций?Я мог бы обернуть эту функцию в mysql_real_escape_string, но подумал, что это может быть избыточно.

Ответы [ 2 ]

3 голосов
/ 05 августа 2011

Предполагается, что мать всех бип , когда дело доходит до инъекции sql.В любом случае оберните его в mysql_real_escape_string.

0 голосов
/ 16 октября 2012

Это не экранирует данные, но это действительно пример рекомендуемого подхода OWASP .

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

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

  1. Используйте безопасный API базы данных.(например, подготовленные операторы или параметризованные запросы)
  2. Использовать специальные экранирующие или экранированные дБ подпрограммы (mysql_real_escape_string попадает в эту категорию).
  3. Белый список область допустимоговходные значения.(Ваше предлагаемое числовое решение попадает в эту категорию)

mysql_real_escape_string не является ответом на все анти-sql-инъекции.Это даже не самый надежный метод, но он работает.Отбрасывание всех, кроме чисел, белого цвета с указанием безопасных значений, а также разумная идея, однако ни один из них не так хорош, как использование безопасного API.

...