ThinkPHP如何防止SQL注入与权限漏洞_输入过滤与参数绑定
作者:暮色微凉
时间:2026-07-06
浏览:0
ThinkPHP中数组形式的`where()`因自动参数绑定可防SQL注入,而字符串拼接危险;`input()`默认不过滤,需显式指定`/s`或`/d`规则;`saveAll()`和`destroy()`需前置权限校验防止越权;`deploy`配置不影响绑定,但从库可能不支持预处理导致静默失效。
ThinkPHP 的 `where()` 用数组更安全,因自动参数绑定防SQL注入;`input()` 不自动过滤,需显式指定规则如`/s`或`/d`;`sa veAll()`/`destroy()`需前置权限校验;`deploy`配置不影响绑定,但从库可能不支持预处理导致静默失效。

ThinkPHP 的 where() 用数组还是字符串?
input() 函数默认不过滤,必须显式指定过滤规则
很多人有个误解,觉得用了 `input('id')` 就等于安全了。其实 `input()` 只负责取值,不会自动转义或过滤。它和原生的 `$_GET['id']` 在数据来源上没本质区别,只是多了层键名检查。 - ❌ **错误用法**:`input('username')` —— 用户传 `username=%3Cscript%3Ealert(1)%3C/script%3E` 照样进库 - ✅ **安全做法**:`input('username/s')`(`/s` 表示 `htmlspecialchars` 过滤)、`input('id/d')`(`/d` 强制转整型) - ⚠️ **坑点**:`/s` 不防 SQL 注入,只防 XSS;`/d` 遇到非数字会返回 0,可能掩盖业务逻辑错误——比如查不到用户却返回 ID=0 的记录,排查起来很头疼批量更新/删除时,为什么 sa veAll() 和 destroy() 仍需校验权限?
数据库配置里 deploy 和 read_master 开关影响参数绑定吗?
作者最新文章
Photoshop文字外框怎么设置?给文字加边框的实用方法
2026-09-22 16:12
白描 PDF
2026-09-16 17:44
密码键盘
2026-09-16 17:43
3dmax快捷键失效了怎么办
2026-09-16 13:53
Xiaomi 18 Fold首销数据解读:较上代大折叠增长310%的原因与配置分析
2026-09-08 16:55
热门文章
更多
精品专题
更多
Mac软件
更多
WINDOWS
更多


































