项目背景
这是一个传统 PHP 单体应用,前端由原生 JavaScript/jQuery 和多页面模板组成,实时聊天使用 Workerman WebSocket,数据存储在 MySQL/MariaDB。系统功能不少,但历史代码同时存在鉴权分散、接口越权、日志噪声、重复连接、数据库冗余和部署过程依赖人工经验等问题。
改造的前提很明确:客户侧品牌页面与主要业务流程保持不变,重点治理后台、安全、实时通信、性能和交付质量。
我的工作
统一登录、会话、角色、同源请求与后台接口权限。
修复跨账号读取、身份字段伪造、接口未鉴权、登录枚举与频率限制问题。
加固图片上传、资源删除、路径校验、XSS 输出编码和 SQL 查询边界。
将客服与客户 WebSocket 身份绑定到真实会话,修复重复连接、断线清理和重连策略。
对聊天记录、会话列表、在线状态和日志查询建立分页、游标与组合索引。
清理废弃表、字段、测试数据、调试输出、重复接口和孤立资源。
真实点击回归后台页面与客户侧关键流程,并修复回归中暴露的问题。
重建单文件安装器,实现环境检测、随机凭据、数据库初始化、Nginx/PHP-FPM/WebSocket 配置和上线检查。
核心难点
传统系统的风险往往不在某一处“明显漏洞”,而在大量不一致的小入口:一个监控接口忘记鉴权、一个资源接口相信前端身份、一个 WebSocket 连接没有绑定会话、一个动态查询无法使用索引。修复时既要建立统一安全边界,又不能破坏存量页面和真实客服链路。
因此本项目采用“静态审计 → 动态复现 → 最小修复 → 浏览器真实点击 → 数据清理 → 空环境部署”的闭环,而不是只通过 PHP 语法检查判断完成。
可量化结果
123 个业务 PHP 文件语法检查通过。
后台 20 个业务/管理页面完成实际交互或页面级回归。
19 个内容分享模板完成渲染验证,浏览器错误与警告为 0。
WebSocket 双端文本链路与来源校验通过,正确握手返回 101。
数据库收敛为 29 张表,并完成导出与完整恢复验证。
登录页传输量减少约 83.4%,后台首页减少约 71.3%。
20 并发、500 次登录页请求 0 失败,实测约 360.88 请求/秒。
系统监控接口历史中位耗时从约 1004ms 降至约 103ms。
最新单文件安装器可从空目录、空数据库完成部署和健康检查。
配套授权中心
同一项目目录中还建设了独立的手动授权中心 V1:Go 服务端、Vue 3/ArtDesignPro 管理端、SQLite WAL、Docker 部署,支持产品、客户、授权码、设备、激活、心跳、解绑、暂停与审计。V2 的 PostgreSQL/Redis、签名租约和 Rust Agent 仍属于后续设计基准,不写成已完成成果。
项目价值
这次改造证明,遗留 PHP 系统不一定要推倒重写。只要先建立真实安全边界,再治理数据、性能、实时链路和部署,就能把一个依赖个人经验维护的项目,转化为可复测、可恢复、可交付的生产系统。