首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel::原始防止不使用setBindings的SQL注入

Laravel::原始防止不使用setBindings的SQL注入
EN

Stack Overflow用户
提问于 2019-05-15 13:46:13
回答 3查看 409关注 0票数 0

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

代码语言:javascript
复制
$this->query->orderBy(\DB::raw("POSITION(\"$value\" IN $column)", 'asc'))

但是现在我遇到了SQL注入保护问题,如何防止$value$column在不使用->setBindings的情况下进行SQL注入?

我不能使用->setBindings,因为我有大量的过滤器列,这取决于表

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-05-15 14:05:56

准备好的语句不能计算列名,因此需要使用白名单来防止注入$column

要保护它不受值的影响,可以将其强制为整数类型或浮点类型,也可以使用接受参数数组的orderByRaw:

代码语言:javascript
复制
$this->query->orderByRaw("POSITION(? IN $column)", [$value])
票数 3
EN

Stack Overflow用户

发布于 2019-05-15 14:05:19

您可以使用orderByRaw,它将接受一个绑定数组。

代码语言:javascript
复制
$this->query->orderByRaw('POSITION(? IN ?) asc', [$value, $column]);
票数 1
EN

Stack Overflow用户

发布于 2019-05-15 14:08:48

试试下面的方法,

代码语言:javascript
复制
$orderByQuery = "select * from table order by POSITION(:value IN :column) asc";
$this->query->select($orderByQuery, [
    "value" => $value,
    "column" => $column
])
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56150942

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档