Я использую MeekroDB в проекте PHP. Для некоторых запросов мне нужно передать произвольные имена полей для сортировки. На сайте meekro НЕТ примеров предложений ORDER BY.
Как безопасно передать имена полей и избежать уязвимостей SQL-инъекций? Я понимаю, что могу заранее проверить каждое имя поля со списком допустимых полей, но я пытаюсь сделать этот код более обобщенным как базовая функция «get»: функция get (Array $ filters, Array $ sort_by)
Будет ли заполнитель% b (обратные метки) достаточен для защиты от произвольного внедрения кода при передаче имен полей?
Например:
SELECT * FROM table1 ORDER BY %b
Или для нескольких полей:
SELECT * FROM table1 ORDER BY %lb
Это безопасно?
Кроме того, как я могу тогда включать произвольно модификаторы DESC или ASC по мере необходимости?
Да, вы можете безопасно использовать b
а также lb
для цели, так как оба реализованы с использованием formatTableName метод, который является безопасным.
К сожалению, модификаторы направления должны быть продезинфицированы вручную, вот так
$dirs = ["ASC","DESC"];
$key = array_search($_GET['dir'], $dirs); // see if we have such a value
$dir = $dirs[$key]; //if not, first one will be set automatically. smart enuf :)
$query = "SELECT * FROM table1 ORDER BY %b $dir"; //value is safe
Других решений пока нет …