VWCG-1238 CODE-02 图片上传白名单及上传目录禁执行

/p/common/upload · 电子菜牌图片 · 本地/OSS双路径

核心边界:不能给通用File::upload()直接加图片白名单。新增uploadImageFile(),只由/p/common/upload调用;校验必须发生在OSS/本地分支之前。

两层防护

应用层

扩展名、finfo MIME、getimagesize类型/尺寸、大小和危险双扩展名全部匹配后才允许保存。

Web层

Nginx对整个/static/upload/禁止PHP、PHTML、PHAR等脚本解析,覆盖sourceimg等子目录。

白名单

允许拒绝
JPG/JPEG、PNG(与当前电子菜牌既有格式一致)PHP/PHTML/PHAR、HTML/JS、SVG、GIF/WebP、无扩展名、危险双扩展、MIME或图片类型不匹配

已采用大小上限10MB、宽高不超过10000×10000。

存储链路

/p/common/upload → uploadImageFile() → validateImageUpload() → 通过后调用原uploadFile() → 本地或OSS → 写ydy_upload_file 任一校验失败 → 无文件、无OSS对象、无数据库记录

不受影响

实施切片

  1. 图片校验器与单元测试。
  2. PC接口和电子菜牌前端。
  3. 本地/OSS双路径回归。
  4. Nginx禁执行、历史文件扫描和证据。

实施状态

业务代码与安全测试已完成,25个测试、104个断言通过
PC前端生产构建已完成
仓库Nginx模板已更新,Docker环境语法检查通过
新吴区生产路径及前缀待部署时回读确认
历史危险文件扫描与复测待生产发布环节执行

代码层已落地;线上漏洞关闭仍以真实vhost禁执行、历史文件清理和复测通过为准。