结论:先别急着把老CMS硬升到PHP8.2,核心思路是「隔离运行 + 堵住上传入口 + 收紧执行权限」,PHP2Shell本质是上传点被利用,跟PHP版本不是一回事。
① 老程序跑在旧PHP版本上更稳,建议用独立容器或独立站点跑PHP7.x,Nginx按站点隔离,别和主站共用同一个PHP-FPM池,避免一个点被拿下全线沦陷。
② 重点排查所有上传入口:头像、附件、模板导入、编辑器图片上传,逐个确认后缀白名单和MIME校验,上传目录一律关掉PHP解析(location里禁止执行.php),这是最直接的一刀。
③ 目录权限收窄,上传目录、缓存目录设成只读或不可执行,运行用户不要给写web根目录的权限;后台入口加IP白名单或二次验证。
④ 确实要升PHP8.2,先在测试环境跑一遍,重点看老CMS的数据库扩展、加密函数和模板引擎,通常卡在mysqli、mcrypt、create_function这些点上,改完再上线。