首页 > 解决方案 > Laravel DB::raw 防止没有 setBindings 的 SQL 注入

问题描述

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

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

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

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

标签: laravelsql-injection

解决方案


准备好的语句无法评估列名,因此您需要使用白名单来防止注入$column.

为了防止值,您可以强制它为整数或浮点类型,或使用接受参数数组的 orderByRaw:

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

推荐阅读