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. 用户密码与认证安全

  • 永远不要存明文密码!
  • 使用 bcryptArgon2 哈希算法。
  • 再结合 RBAC 权限控制,确保不同角色的访问权限严格隔离。

总结

安全是一个 体系工程,不仅仅依赖框架本身。

在 ThinkPHP 项目中落实以上 10 条安全措施,可以大幅降低被攻击的风险。

👉 你在 ThinkPHP 项目里,遇到过哪些“惊险”的安全漏洞?

欢迎在评论区分享,让更多开发者少踩坑! 🚀

posted @ 2025-09-24 11:29  刘俊涛的博客  阅读(15)  评论(0)    收藏  举报