laravel - Laravel DB::raw 防止没有 setBindings 的 SQL 注入
问题描述
我有一个用于过滤的动态查询,现在我遇到了一个问题,我需要使用 DB::raw 进行排序
$this->query->orderBy(\DB::raw("POSITION(\"$value\" IN $column)", 'asc'))
但是现在我有一个 SQL 注入保护问题,如何在不使用的情况下防止$value
和$column
避免 SQL 注入->setBindings
我不能使用->setBindings
,因为我有大量的过滤器列,具体取决于表格
解决方案
准备好的语句无法评估列名,因此您需要使用白名单来防止注入$column
.
为了防止值,您可以强制它为整数或浮点类型,或使用接受参数数组的 orderByRaw:
$this->query->orderByRaw("POSITION(? IN $column)", [$value])
推荐阅读
- php - 类似功能不适用于搜索
- javascript - 两个标签之间的网页抓取,使用cheerio
- java - 如何使用嵌套数组列表将 JLabel 项目发送到 Apache POI
- python - 如何正确创建 saved_model.pb?
- node.js - 在 mongodb 中加入两个集合
- javascript - 试图在 turfJS 中配置可配置属性的可配置属性?
- floating-point - clang/gcc 仅使用 -ffast-math 生成 fma;为什么?
- asp.net - 内容安全策略框架祖先在 IE 11 中不起作用
- amazon-web-services - AWS 应用程序负载均衡器公共 URL 不起作用
- typescript - 将装饰器应用于模块中的每个函数的函数类型