Laravel DB :: raw предотвращает SQL-инъекцию без setBindings - PullRequest
0 голосов
/ 15 мая 2019

У меня динамический запрос на фильтрацию, и теперь у меня возникла проблема, когда мне нужно использовать DB :: raw для упорядочения по

$this->query->orderBy(\DB::raw("POSITION(\"$value\" IN $column)", 'asc'))

Но теперь у меня возникла проблема защиты от SQL-инъекций, как я могу предотвратить $value и $column от SQL-инъекций без использования ->setBindings

Я не могу использовать ->setBindings, потому что у меня есть динамическое число столбцов фильтра в зависимости от таблицы

Ответы [ 3 ]

3 голосов
/ 15 мая 2019

Подготовленные операторы не могут оценивать имена столбцов, поэтому вам нужно использовать белый список для защиты от инъекций в $column.

Чтобы защитить от значения, вы можете сделать его целочисленным или с плавающим типом.или используйте orderByRaw, который принимает массив параметров:

$this->query->orderByRaw("POSITION(? IN $column)", [$value])
1 голос
/ 15 мая 2019

Вы можете использовать orderByRaw, который будет принимать массив привязок.

$this->query->orderByRaw('POSITION(? IN ?) asc', [$value, $column]);
0 голосов
/ 15 мая 2019

Попробуйте ниже,

$orderByQuery = "select * from table order by POSITION(:value IN :column) asc";
$this->query->select($orderByQuery, [
    "value" => $value,
    "column" => $column
])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...