PHP 8.1至8.4各版本安全特性以修复隐患、收紧约束、管控错误为主,重大安全更新集中于2026年10月——修复多年潜伏漏洞;其中8.1引入readonly属性但存在继承与构造安全缺陷,8.2成高危漏洞影响分水岭。

修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
PHP 8.1:readonly 属性引入,但存在继承与构造安全缺陷
• 首次支持 public readonly string $host;,防止属性被意外修改,适用于配置类等场景
• ⚠️ 但存在边界问题:在子类中重写构造函数、或在父类构造中访问未完全初始化的 readonly 属性,可能绕过冻结逻辑,引发未定义行为甚至内存异常
• 官方在 8.3 中才完成对该特性的关键修复(见下文)
PHP 8.2:无重大安全新特性,但成为高危漏洞影响范围的“分水岭”
• 本身未引入新安全模型,但因长期维护,成为大量生产环境的主力版本
• 2026年10月披露的两项严重漏洞(CVE-2026-109618 / CVE-2026-109619)均影响 8.2.x
• 漏洞本质是内存管理缺陷:在内存不足或错误处理路径中,PHP 可能操作已释放或未初始化的内存区域,导致远程代码执行(RCE)风险
• 使用 Apache mod_php 的部署方式风险最高,攻击可发生在应用代码执行前
PHP 8.3:修复 readonly 安全缺陷 + 新增显式覆盖标记
• 修正了 8.1 引入的 readonly 属性在继承链、构造顺序中的多个绕过场景,使冻结行为真正可靠
• 新增 #[\Override] 属性,强制要求子类方法明确标注“覆盖父类”,避免因签名微小差异(如返回类型变更)导致意外交互或逻辑跳过,间接减少维护引发的安全疏漏
• 引入 str_increment()/str_decrement(),虽非安全特性,但对输入校验更严格(空串/非ASCII字母数字直接抛 ValueError),有助于防御弱类型参数滥用
PHP 8.4:readonly class —— 全对象级不可变保障
• 推出 readonly class Config { public string $host; },整个实例化后的对象状态完全冻结
• ✅ 即使通过反射、__set()、动态属性赋值,均触发 Fatal Error(非可捕获的 Exception),无法绕过
• ✅ 无普通构造函数,必须用构造属性提升语法,杜绝构造过程中状态污染
• ⚠️ 不适用于需运行时修改的类(如实体、服务类),但对 DTO、配置、事件对象等纯数据载体,提供了最强封装保护
统一安全动作:2026年10月紧急更新(所有版本均需升级)
• 影响范围:PHP 8.1 及以上所有分支(8.1.x、8.2.x
• 修复核心:两项 CVSS 4.0 评分高达 9.2 的漏洞,根源在 Zend 引擎的内存清理与全局状态复用逻辑
• 行动建议:
– 立即升级至对应安全版本(如当前用 8.3.35 → 升 8.3.36)
– 检查部署方式:PHP-FPM 用户风险略低于 mod_php,但仍需更新
– 不依赖 WAF 或网络层拦截,该漏洞可在请求解析阶段触发,需从运行时层面修复


















