ThinkPHP 项目必做的 10 大安全防护措施(开发者必看)
🔒 ThinkPHP 项目必做的 10 大安全防护措施(开发者必看)
在用 ThinkPHP 开发项目时,你可能会觉得框架本身已经做了不少安全防护,但要记住:永远不要相信用户提交的数据!
一个小小的疏忽,就可能让项目暴露在 SQL 注入、XSS 或 CSRF 攻击中。
今天,我整理了 ThinkPHP 安全开发的 10 大实用技巧,帮你快速梳理该做的防护措施,让你的应用更稳、更安全。
1. 设置public为唯一对外访问目录
- 不要把资源文件放到应用目录下。
- 所有可访问的文件,都应该只在 public 目录里。
- 这样即便有人尝试访问框架内部文件,也会被直接阻止。
2. 开启表单令牌验证(CSRF 防御)
- ThinkPHP 提供了 表单令牌机制。
- 开启后,可以有效防止 重复提交和 CSRF 攻击。
- 在表单和 AJAX 提交时,务必携带令牌。
3. 使用框架的请求方法获取参数
- 避免直接使用 $_GET、$_POST 等原生变量。
- 推荐使用:
request()->param('id');
input('post.username');
- 这样可以避免绕过过滤和安全处理。
4. 设置全局过滤规则
- ThinkPHP 默认 没有任何过滤规则。
- 可以在配置文件里设置:
'default_filter' => 'htmlspecialchars',
- 常见过滤函数:htmlentities、htmlspecialchars、strip_tags 等。
- 根据业务场景选择,防止 XSS 注入。
5. 使用验证类(Validate)
- 对用户输入做 数据校验,例如邮箱、手机号、必填项等。
- 验证类能减少脏数据进入数据库的风险。
- 例如:
$validate = new \app\validate\User;
if (!$validate->check($data)) {
return $validate->getError();
}
6. 强制路由 / MISS 路由
- 建议开启 强制路由,所有请求必须符合路由规则。
- 或者配置 MISS 路由,过滤掉非法请求。
- 这样能避免随机扫描 URL 时被黑客利用。
7. 使用预处理语句或 ORM
- 不要拼接 SQL!
- 推荐使用 Db 类或 ORM:
Db::name('user')->where('id', $id)->find();
- 内部使用预处理机制,可以抵御 SQL 注入攻击。
8. 文件上传安全控制
-
上传文件是安全高风险点。
-
需要做的检查包括:
- 文件类型(白名单)
- 文件大小
- 存储位置(不要放在能直接执行的目录)
-
推荐把上传文件统一放到 storage/uploads,并禁用 PHP 解析。
9. 会话与权限控制
- 使用 HTTPS 传输会话数据。
- 会话 ID 需复杂随机,并定期刷新。
- 合理设置目录和文件权限,避免 .env、配置文件被直接访问。
10. 用户密码与认证安全
- 永远不要存明文密码!
- 使用 bcrypt 或 Argon2 哈希算法。
- 再结合 RBAC 权限控制,确保不同角色的访问权限严格隔离。
总结
安全是一个 体系工程,不仅仅依赖框架本身。
在 ThinkPHP 项目中落实以上 10 条安全措施,可以大幅降低被攻击的风险。
👉 你在 ThinkPHP 项目里,遇到过哪些“惊险”的安全漏洞?
欢迎在评论区分享,让更多开发者少踩坑! 🚀
你要保守你心,胜过保守一切。
本文来自博客园,作者:刘俊涛的博客,转载请注明原文链接:https://www.cnblogs.com/lovebing/p/19108847