Laravel DB::raw 防止 SQL 没有 setBindings 的注入
Laravel DB::raw prevent SQL Injection without setBindings
我有一个用于过滤的动态查询,现在我遇到了一个问题,我需要使用 DB::raw 按
进行排序
$this->query->orderBy(\DB::raw("POSITION(\"$value\" IN $column)", 'asc'))
但现在我有一个 SQL 注入保护问题,我如何在不使用 ->setBindings
[ 的情况下防止 $value
和 $column
来自 SQL 注入=18=]
我不能使用 ->setBindings
因为我有动态数量的过滤列,具体取决于 table
您可以使用 orderByRaw
来接受绑定数组。
$this->query->orderByRaw('POSITION(? IN ?) asc', [$value, $column]);
准备好的语句无法评估列名,因此您需要使用白名单来防止注入 $column
.
为了防止值,您可以强制它是整数或浮点类型,或者使用接受参数数组的 orderByRaw:
$this->query->orderByRaw("POSITION(? IN $column)", [$value])
试试下面的方法,
$orderByQuery = "select * from table order by POSITION(:value IN :column) asc";
$this->query->select($orderByQuery, [
"value" => $value,
"column" => $column
])
我有一个用于过滤的动态查询,现在我遇到了一个问题,我需要使用 DB::raw 按
进行排序$this->query->orderBy(\DB::raw("POSITION(\"$value\" IN $column)", 'asc'))
但现在我有一个 SQL 注入保护问题,我如何在不使用 ->setBindings
[ 的情况下防止 $value
和 $column
来自 SQL 注入=18=]
我不能使用 ->setBindings
因为我有动态数量的过滤列,具体取决于 table
您可以使用 orderByRaw
来接受绑定数组。
$this->query->orderByRaw('POSITION(? IN ?) asc', [$value, $column]);
准备好的语句无法评估列名,因此您需要使用白名单来防止注入 $column
.
为了防止值,您可以强制它是整数或浮点类型,或者使用接受参数数组的 orderByRaw:
$this->query->orderByRaw("POSITION(? IN $column)", [$value])
试试下面的方法,
$orderByQuery = "select * from table order by POSITION(:value IN :column) asc";
$this->query->select($orderByQuery, [
"value" => $value,
"column" => $column
])