发布于2026-07-06 阅读(0)
扫一扫,手机访问
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 开关影响参数绑定吗?
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8