Laravel10DB 原生查询绑定参数,防止 SQL 注入安全编码规范

风雪小哥_9339

风雪小哥_9339

2026-10-03

770人浏览

原创

laravel 10 原生 db 查询必须手动参数绑定防 sql 注入,db::select() 等方法及 whereraw() 等 raw 方法均需显式传绑定数组;标识符(表名、字段名等)须白名单校验;优先使用 query builder 自动参数化方法。

laravel10db 原生查询绑定参数,防止 sql 注入安全编码规范

只要用对方法,Laravel 10 的 DB 原生查询本身不自带防护,必须手动绑定参数——否则用户输入直接拼进 SQL 字符串,立刻触发 SQL 注入。

DB::select()、DB::update() 等原生方法必须显式绑定

这些方法绕过 Query Builder 的自动参数化机制,完全依赖你传参方式。不绑定 = 裸奔。

  • 错误写法(高危):DB::select("SELECT * FROM users WHERE id = " . $id) 或 DB::update("UPDATE posts SET title = '" . $title . "' WHERE id = " . $id)
  • 正确写法(位置占位):DB::select("SELECT * FROM users WHERE id = ?", [$id])
  • 正确写法(命名绑定):DB::select("SELECT * FROM users WHERE id = :id", ['id' => $id])
  • 所有 DB:: 开头的原生执行方法(select、insert、update、delete、statement)都适用同一规则

所有 Raw 方法必须带绑定数组参数

whereRaw()、selectRaw()、orderByRaw()、havingRaw()、groupByRaw() 这些方法默认不自动绑定。只要 SQL 字符串里含用户输入,第二个参数(绑定数组)就不可省略。

Laravel Creem Agent
Laravel Creem Agent

Creem 支付商店助理 — 查询订阅、客户、交易、产品,执行心跳检查,管理本地 Laravel支付商店。

下载
  • 错误写法:->whereRaw("name LIKE '%$keyword%'") 或 ->orderByRaw($request->input('sort'))
  • 安全写法(值绑定):->whereRaw("name LIKE ?", ["%{$keyword}%"])
  • 安全写法(标识符禁止绑定):字段名、排序方向等不能用 ? 占位,例如 ->orderByRaw($sortField . ' ' . $sortDir) 中的 $sortField 必须白名单校验

表名、列名、排序字段等标识符必须白名单硬校验

PDO 预处理只支持绑定“值”,不支持绑定“标识符”(如表名、列名、GROUP BY 字段)。任何将用户输入拼进这些位置的操作,都是注入入口。

  • 危险场景:DB::table($request->table)、->select("col_{$suffix}")、->orderBy($request->field)
  • 推荐做法一(请求验证):$request->validate(['table' => 'required|in:users,posts,comments'])
  • 推荐做法二(运行时校验):if (!in_array($field, ['id', 'name', 'created_at'], true)) { abort(400); }
  • 不要仅靠 (int)$id 或 strip_tags() —— 攻击者可构造有效 payload 绕过,比如用于缓存键或日志拼接时仍会出问题

优先使用标准 Query Builder 方法,少写 Raw

绝大多数业务场景无需 Raw。用对 where()、whereIn()、orderBy()、select() 等方法,底层自动走 PDO 预处理,天然防注入。

  • User::where('email', $request->email)->first() —— 安全,哪怕 $request->email 是 "admin' -- "
  • DB::table('orders')->whereIn('status', $statuses) —— 数组也安全,框架自动生成 IN (?, ?, ?)
  • ->where('title', 'like', "%{$q}%") —— 模糊匹配同样参数化,% 是 PHP 拼接,$q 仍是绑定值
  • 能不用 whereRaw() 就不用;能用 where() 实现,就别为省一行代码引入风险

相关专题

更多
laravel组件介绍
laravel组件介绍

laravel 提供了丰富的组件,包括身份验证、模板引擎、缓存、命令行工具、数据库交互、对象关系映射器、事件处理、文件操作、电子邮件发送、队列管理和数据验证。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

2024.04.09

837

10

laravel中间件介绍
laravel中间件介绍

laravel 中间件分为五种类型:全局、路由、组、终止和自定。想了解更多laravel中间件的相关内容,可以阅读本专题下面的文章。

2024.04.09

815

9

laravel使用的设计模式有哪些
laravel使用的设计模式有哪些

laravel使用的设计模式有:1、单例模式;2、工厂方法模式;3、建造者模式;4、适配器模式;5、装饰器模式;6、策略模式;7、观察者模式。想了解更多laravel的相关内容,可以阅读本专题下面的文章。

2024.04.09

2468

10

thinkphp和laravel哪个简单
thinkphp和laravel哪个简单

对于初学者来说,laravel 的入门门槛较低,更易上手,原因包括:1. 更简单的安装和配置;2. 丰富的文档和社区支持;3. 简洁易懂的语法和 api;4. 平缓的学习曲线。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.04.10

3601

7

laravel入门教程
laravel入门教程

本专题整合了laravel入门教程,想了解更多详细内容,请阅读专题下面的文章。

2025.08.05

5070

22

laravel实战教程
laravel实战教程

本专题整合了laravel实战教程,阅读专题下面的文章了解更多详细内容。

2025.08.05

3416

13

laravel面试题
laravel面试题

本专题整合了laravel面试题相关内容,阅读专题下面的文章了解更多详细内容。

2025.08.05

6449

7

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

2026.03.04

1376

29

Laravel 框架安装指南
Laravel 框架安装指南

本指南详解 Laravel 框架安装全流程,涵盖 PHP 8.1+ 环境配置、Composer 依赖管理工具安装及国内镜像源优化。重点演示使用 composer create-project 命令创建 Laravel 10/11 项目,解决常见安装错误与依赖冲突。从环境搭建到项目初始化,助您快速完成 Laravel 开发环境部署,为后续 Web 应用开发奠定基础。适合 PHP 初学者与框架迁移开发者参考。

2026.04.09

195

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程