codeigniter 官方在 2026 年 7 月 7 日放出了 4.7.4 版本。这次更新核心是安全修复,官方公开的更新日志里列了四项安全问题,同时还修复了 api、数据库、加密、过滤器、会话、验证等多个模块的已知缺陷。所有正在运行 codeigniter 4.7 分支的项目,别把这次更新当普通小补丁,要当成重要的安全维护项来评估升级。

来源:CodeIgniter 官方用户指南
第一个改动点涉及 IncomingRequest::isSecure() 方法。新版调整了逻辑:只有当请求来自 Config\App::$proxyIPs 配置里提前设置的可信代理时,才会信任客户端传来的 X-Forwarded-Proto 与 Front-End-Https 请求头,避免普通用户伪造代理相关请求头,干扰系统对 HTTPS 连接的判断。部署在反向代理后面的站点,升级完一定要核对自己的代理地址配置,不能只更新框架,留着模糊的可信IP边界。

来源:CodeIgniter 官方用户指南
数据库部分,修了查询构造器 deleteBatch() 方法的 SQL 注入问题。官方说明提到,之前这个方法搭配 where() 条件使用时,WHERE 子句里的绑定值可能会被忽略转义规则,直接拼进生成的 SQL 语句里。4.7.4 版本已经把这类绑定值的转义逻辑,改成和普通 delete() 方法完全一致的规则。用到批量删除、还自行拼接条件的业务,一定要优先把相关查询和权限校验逻辑跑一遍回归测试。

来源:CodeIgniter 官方用户指南
文件上传链路有两处关键调整:第一,UploadedFile::move() 方法如果没传第二个自定义文件名参数,会自动清理客户端传来的默认文件名,防止路径穿越序列把文件写到目标目录之外;如果是开发者自己明确传入第二个文件名参数,该名称的合法性仍由调用方自行负责校验。第二,is_image 与 mime_in 两个验证规则,现在会检查非空客户端扩展名和实际检测到的文件内容是否匹配,降低带危险扩展名的伪装文件通过验证的风险。没有扩展名的 JavaScript Blob 上传场景,仍可正常按文件内容做验证。

来源:CodeIgniter 官方用户指南
其他常规缺陷修复也覆盖了不少运行环节,包括 Transformers 的字段与包含参数向嵌套转换器泄漏、env() 接收非字符串值时的类型错误、updateBatch() 与不受支持的 WHERE 条件组合出错、Redis 会话锁重试配置未生效,以及 required_without 使用数组点号语法时的判断异常。升级前记得备份数据库与上传目录,并在测试环境把代理 HTTPS 判断、批量删除、上传验证、API 字段裁剪和会话锁这些实际用到的场景都跑一遍回归。

来源:CodeIgniter 官方用户指南
4.7.4 的核心价值就是缩小可被利用的输入边界,同时修复多个跨模块的稳定性问题。官方也没把它做成带新增功能的版本,维护优先级很明确:先确认现有项目有没有用到改动涉及的相关接口,再完成依赖更新、自动化测试,上线后做好生产环境监控,别把这次安全补丁和业务功能改造混在同一次上线里发布。











