Laravel DB :: raw防止没有setBindings的SQL注入

时间:2019-05-15 13:46:14

标签: laravel sql-injection

我有一个用于过滤的动态查询,现在我需要使用DB :: raw进行排序

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

但是现在这里有一个SQL注入保护问题,如何在不使用$value的情况下防止$column->setBindings免受SQL注入

我不能使用->setBindings,因为我有不同数量的过滤器列,具体取决于表格

3 个答案:

答案 0 :(得分:3)

准备好的语句无法评估列名,因此您需要使用白名单来防止注入--- Ajust to match your time period datatype DECLARE @utcTimeStamp datetime2(3) = DATEADD(ms, -1, DATEADD(DAY, 1, CAST(@date AS datetime2(3)))) AT TIME ZONE 'Eastern Standard Time' AT TIME ZONE 'UTC';

要防止出现值,可以将其强制为整数或浮点类型,也可以使用可以接受参数数组的orderByRaw:

$column

答案 1 :(得分:1)

您可以使用orderByRaw来接受绑定数组。

$this->query->orderByRaw('POSITION(? IN ?) asc', [$value, $column]);

答案 2 :(得分:-1)

尝试以下

$orderByQuery = "select * from table order by POSITION(:value IN :column) asc";
$this->query->select($orderByQuery, [
    "value" => $value,
    "column" => $column
])