2026-06-06 后台 CSRF 与敏感操作加固
本次对后台管理区增加全局 CSRF 防护,并对仍使用 GET 的敏感操作补充 token 校验。
主要改动:
- 后台全局 POST CSRF 校验
- 文件:admin/admin.func.php
- 新增
admin_csrf_token()、admin_csrf_check_token()、admin_csrf_url()、admin_csrf_check()。
- CSRF Token 保存在后台管理员当前 Session 中。
- Token 使用
random_bytes() 生成;低版本环境回退到基于站点密钥、时间和随机数的生成方式。
- 文件:admin/index.inc.php
- 后台入口在管理员 token 校验后,对所有后台
POST 请求统一校验 CSRF Token。
- 后台登录
index-login 保持放行,避免未登录状态无法提交登录表单。
- 后台表单和 AJAX 自动携带 CSRF Token
- 文件:admin/view/htm/footer.inc.htm
- 后台页面输出
admin_csrf_token JS 变量。
- 自动为所有后台
method="post" 表单添加隐藏字段 admin_csrf_token。
- 包装后台页面中的
$.xpost(),自动给字符串、对象、空参数 POST 请求附加 admin_csrf_token。
- GET 敏感操作加固
- 文件:admin/route/plugin.php
- 插件
download、install、unstall、enable、disable、upgrade 操作增加 admin_csrf_check_token()。
- 文件:admin/route/forum.php
- 版块删除操作增加
admin_csrf_check_token()。
- 文件:admin/route/index.php
- 后台退出登录增加
admin_csrf_check_token()。
- 后台敏感链接补充 CSRF 参数
- 文件:admin/view/htm/plugin_list.htm
- 文件:admin/view/htm/plugin_read.htm
- 文件:admin/view/htm/header_nav.inc.htm
- 插件下载、安装、卸载、启用、禁用、升级,以及后台退出链接统一使用
admin_csrf_url()。
- 插件购买成功后的自动跳转下载也会附加 CSRF Token。
影响说明:
- 后台页面内正常表单提交和 AJAX 操作不需要逐个改业务代码。
- 第三方插件后台页面如果复用后台公共 footer,POST 请求会自动携带 CSRF Token。
- 外部站点伪造后台 POST 或 GET 敏感操作时,因为无法获取当前管理员 Session 中的 token,会被拒绝。
- 不影响新安装流程,无需数据库结构变更。