ThinkCMF防SQL注入:安全过滤实战指南

📅 发布时间:2026/7/16 12:55:46 👁️ 浏览次数:
ThinkCMF防SQL注入:安全过滤实战指南
今天我们就来聊聊如何守住网站的“保险箱”——也就是防止 SQL 注入与数据安全过滤。很多从原生 PHP 时代走过来的开发者最习惯的操作就是拼字符串SELECT * FROM users WHERE id . $id。在 ThinkCMF基于 ThinkPHP中如果你还保留这种习惯那就相当于给黑客留了个“后门”。 今日知识点拥抱参数绑定彻底终结 SQL 注入核心逻辑ThinkCMF 的数据库底层Query Builder默认就是安全的因为它使用了PDO 参数绑定。只要你按照框架的规范写代码框架就会自动对用户输入的数据进行“消毒”让恶意脚本失效。1. 错误示范致命的拼字符串如果你在代码里写了类似下面的whereRaw那就危险了// ❌ 极度危险攻击者可以将 $id 改为 5 OR 11从而获取所有用户信息$idrequest()-param(id);$userDb::name(user)-whereRaw(id $id)-find();2. 正确姿势使用表达式查询永远优先使用框架提供的数组格式或方法调用它们会自动处理预处理语句// ✅ 安全框架会自动将 $id 转化为安全的参数$idrequest()-param(id);$userDb::name(user)-where(id,$id)-find();// ✅ 如果必须用 Raw 语句请手动绑定参数$userDb::name(user)-whereRaw(id :id,[id$id])-find();3. 数据过滤的“双保险”除了数据库层面在获取用户输入时ThinkCMF 提供了极其方便的过滤机制。// 仅获取整数过滤掉任何可能的恶意字符串$idrequest()-param(id/d);// 仅获取字母和数字$namerequest()-param(name/s);// 全局强制过滤在 config/app.php 中配置 default_filter// 推荐加上 htmlspecialchars防止 XSS 攻击default_filterhtmlspecialchars,strip_tags, 为什么老司机不担心注入特性拼字符串 (Raw SQL)Query Builder (框架规范)安全性极其脆弱容易被注入原生防注入参数自动绑定可读性代码混乱引号嵌套多链式操作逻辑清晰兼容性难适配不同数据库全兼容MySQL/PgSQL/Sqlite性能重复编译 SQLSQL 预编译多次执行效率更高⚠️ 安全进阶建议开启数据库调试模式仅限本地在本地开发时通过Runtime/log查看生成的 SQL 语句确认参数是否正确绑定。强制类型转换在接收 ID 类参数时后面加上/d如param(id/d)这是最简单有效的防御。禁止 root 用户连接生产环境的数据库账号只赋予该项目所需的权限别让数据库账号有“格式化硬盘”的权力。️ 今日作业检查一下你最近写的自定义查询逻辑有没有用到whereRaw或query如果有看看里面是否直接拼入了变量如果有请立刻改成数组传参或参数绑定。今日金句不要试图去过滤每一个坏字符要学会使用不给坏字符机会的“制度”。插件地址https://ext.dcloud.net.cn/publisher?id20190