逐漏洞解决方案
P0SEC-XW-01 管理员弱口令
问题:已知正确弱口令首次尝试即可登录,失败锁定无法阻止泄露口令被直接使用。
代码整改
- PC后台正确弱密码不签发Token,只进入改密流程;改成强密码后重新登录。
- PC新建、主动改密、过期改密统一为12~32位并包含大小写、数字和特殊字符。
- 管理员还原继续使用initial_pwd,但配置不合规则拒绝还原。
- 缓存不存在时旧Token直接失效;小程序、移动端和其他API不增加强制改密。
生产处置与验收
CODE-01已开发完成:提交719015a39、7c93d3c72、290a5ee1c;25项测试、104个断言、HTTP回归、Docker构建和Playwright验收通过。生产仍需修改报告管理员密码、确认不可预测的强initial_pwd、清理后台会话并复测旧密码/旧Token失效。
P0SEC-XW-02 任意文件上传导致 RCE
原问题:/p/common/upload 使用空校验规则,文件进入 Web 可访问目录,Nginx 又允许 PHP 解析。CODE-02现已在 master_patch完成开发,客户旧环境仍待部署。
取得后台登录态 → 上传脚本 → 文件进入 public/static/upload → Nginx 交给 PHP-FPM → 执行代码
代码整改
- 为数字菜牌建立专用图片上传方法,只允许现有业务使用的 JPG/JPEG、PNG。
- 同时校验扩展名、服务端 MIME、图片解码结果和大小,拒绝 SVG、PHP、PHAR、PHTML、HTML和双扩展名。
- 服务端随机命名;失败时删除临时文件;不影响 Excel 等其他附件上传链路。
Web 层与验收
Nginx 对 /static/upload/ 永久禁止脚本解析。代码提交 03983cb81、证据提交 40871e429已推送;合法图片必须正常展示,伪造 MIME、脚本内容、双扩展名均应拒绝,人工放入脚本后访问返回403/404。
P0SEC-XW-03 配置与凭据泄露
关系判断:CODE-03不是另一条独立代码漏洞,而是攻击者利用CODE-02上传并执行配置读取脚本后的结果。CODE-02部署后不再重复开发CODE-03业务代码;但报告已展示配置内容,说明脚本执行过,历史泄露影响仍需处置。
CODE-02 上传并执行脚本 → 脚本读取现有配置 → CODE-03 配置/凭据泄露
CODE-02修复:阻断再次上传执行
CODE-03剩余:删除历史脚本 + 轮换已泄露凭据 + 验证旧值失效
CODE-04:另一条独立文件读取路径,仍需单独修复
事件处置
- 保全日志、文件元数据和实例快照,再隔离受影响入口。
- 扫描上传目录、临时目录、定时任务、启动项、SSH key 和 PHP 自动加载配置。
- 先记录已知脚本的stat和SHA256,将精确文件移出Web目录隔离,再按取证要求永久删除;原URL必须返回404。
- 使用可信提交和可信发布包重新部署应用目录,不以只删除一个WebShell作为全部清理完成标准。
- 轮换后台、数据库、Redis、公众号、人脸、AI及其他第三方凭据。
- 检查共享实例和其他租户,持续观察异常访问至少一个完整业务周期。
关闭证据
提供原脚本隔离/删除记录、URL 404、危险扩展扫描、可信发布包校验、脱敏轮换台账、旧凭据失效和最小权限验证。查看CODE-03最小方案与安全删除步骤。
P0SEC-XW-04 任意文件读取
问题:下载接口不要求登录,并直接使用客户端提交的 file_array 路径,缺少真实路径边界。
前序覆盖判断:CODE-01、CODE-02及CODE-03处置均不能关闭该漏洞;上传白名单和Nginx禁执行不会阻止PHP应用读取服务器已有文件。
代码整改
- 恢复
checkLogin,统一解析单文件和批量文件。
- 拒绝空字节、绝对路径、协议路径、目录穿越和符号链接逃逸。
- 通过
realpath() 确认目标是 public/static/upload/ 内的普通文件。
- 批量下载任一文件非法则整体拒绝;临时 ZIP 使用系统临时目录并及时删除。
验收
现有电子档案单文件和批量下载保持正常;未登录、编码穿越、混合分隔符、绝对路径和符号链接用例全部失败,响应不泄露真实路径。查看CODE-04独立方案。
P1SEC-XW-05 surplusBoard 公开大屏风险接受
业务结论:大屏本身要求免登录,匿名访问属于产品设计。当前仅返回餐厅名称、设备编号、菜品名称、剩余重量/比例和状态,不含人员、订单、金额或凭据。
本轮处理
扫描报告为低危;若客户整改范围只要求高危和中危,本项不修改业务代码,不增加登录、固定Token或设备身份。以业务用途、字段清单和风险接受说明响应扫描项。
可选加固与重新打开
可按实际屏幕数量设置兼容30秒轮询的限流并记录异常高频访问。未来新增敏感字段、要求餐厅隔离、发生滥用,或合同要求低危必须技术关闭时重新评审。
P0SEC-XW-06 数据库备份公开下载
问题:备份文件位于 Web 可访问目录时,无需登录即可通过 URL 下载;升级 PHP 代码不会自动删除这些文件。
部署整改
- 清理 Web 根目录中的 SQL、备份包、配置副本和临时压缩包。
- 备份迁移到非 Web 独立挂载目录或私有对象存储,并采用最小文件权限。
- Nginx默认拒绝 SQL、BAK、BACKUP、DUMP、ENV、INI、LOG和隐藏文件。
- ZIP/TAR/GZ按目录控制,只开放明确的受控业务下载目录。
验收
原备份 URL、常见备份文件名和隐藏文件均返回 403/404;正常静态资源和合法附件不受影响;新备份任务只写入非 Web 目录。