я использую $_GET['id']
чтобы получить идентификатор и посмотреть его в БД.
у меня сложилось впечатление, что если я буду использовать is_numeric
функция для проверки строки является числовой или нет, то мне не нужно экранировать ввод, используя mysqli_real_escape_string
, но недавно нашел это.
Находит, является ли данная переменная числовой. Числовые строки состоят
необязательного знака, любого количества цифр, необязательной десятичной части и
необязательная экспоненциальная часть. Таким образом, + 0123.45e6 является допустимым числовым значением.
Шестнадцатеричный (например, 0xf4c3b00c), двоичный (например, 0b10100111001), восьмеричный
(например, 0777) запись также допускается, но только без знака, десятичной и
экспоненциальная часть.
ссылка: http://php.net/manual/en/function.is-numeric.php
Итак, мой вопрос
Должен ли я избежать ввода, используя mysqli_real_escape_string, хотя я проверяю его с помощью is_numeric, чтобы предотвратить инъекцию sql ?
в качестве ввода будет только числовое значение, например. 555, 222 456, 879
Хотя я не могу придумать конкретный способ напасть на ваш пример, «я не могу придумать способ»! = «Это невозможно».
Если вы привыкли проверять, а затем передавать значения, в конечном итоге вы попадете в проблему!
Ваше утверждение «входные данные будут представлять собой только числовые значения, например, 555, 222,456, 879», очевидно, неверно, поскольку вы привели несколько более сложных примеров в своей цитате — как SQL будет обрабатывать + 0123.45e6 или 0b10? Строка, содержащая число, не совпадает с числом.
По этой причине, ВСЕГДА ИСПОЛЬЗОВАНИЕ ПОДГОТОВЛЕН ЗАЯВЛЕНИЯ — Таким образом, вам не нужно беспокоиться об этом. +1 к @Ohgodwhy.
Если вы могли бы найти причину не использовать подготовленные заявления (а я не думаю, что они есть!), Давайте поговорим.
Других решений пока нет …