打印文件来自不受信任的用户手机。即使文件只是为了打印,也不能默认它是安全、完整或与扩展名一致的。文件处理应在中心平台完成严格预检,门店代理只接收已经批准的标准化文件。

一、第一期支持范围

建议正式第一期继续只支持:

  • PDF
  • JPG / JPEG
  • PNG

这三类已经在当前原型中实现基础校验。DOC、DOCX、PPT、PPTX、XLS 和 XLSX 暂不直接交给门店电脑打开。

二、完整处理管线

1. 上传前控制

  • 扩展名白名单
  • 用户、IP 和设备的上传频率限制
  • 声明文件大小限制
  • 单用户存储配额
  • 目标打印机能力检查

2. 上传到私有对象存储

小程序使用短期签名直传,Bucket 不公开。对象键使用随机 ID,不使用原始文件名作为路径,避免路径冲突、中文编码和隐私泄漏。

3. 上传完成复核

服务端读取对象元数据和文件内容,检查:

  • 实际大小与声明大小一致
  • MIME 和扩展名匹配
  • 文件魔数匹配
  • SHA-256 计算完成
  • 对象没有在校验期间发生变化

4. 格式解析

PDF 检查结构、真实页数、页面尺寸、加密状态和解析超时。图片检查宽高、总像素、解码内存和颜色模式。

不能仅根据 PDF 文件中的一个字符串估算页数;价格和页数必须来自受控解析器的实际结果。

5. 恶意内容扫描

  • 使用恶意文件扫描引擎
  • 限制压缩层级和展开后大小
  • 限制 CPU、内存、磁盘和处理时间
  • 禁止解析器访问外网
  • 不执行脚本、宏或嵌入附件
  • 失败对象进入隔离区,不进入报价

6. 规范化

图片可以转换为标准 PDF,固定页面尺寸、方向、缩放和背景。规范化文件生成新的 SHA-256,并记录它与源文件的派生关系。

7. 代理下载复验

门店代理核对:

  • HTTP 返回码
  • Content-Length
  • 实际下载字节数
  • 平台提供的 SHA-256
  • 文件类型和任务参数摘要

校验失败时可以重新下载,因为还没有接触打印机。

8. 打印后清理

源文件和派生文件按 expires_at 自动删除。删除任务需要重试、积压监控和审计,不能只依赖一个可能失效的定时脚本。

三、为什么 Office 文档要单独处理

Office 文档的页数与字体、软件版本、打印驱动、纸张和区域设置有关,还可能包含宏、外链、嵌入对象和复杂公式。如果门店代理直接用本地 Office 打开:

  • 页面数可能与报价不一致
  • 缺少字体会改变排版
  • 宏或外链增加安全风险
  • Office 弹窗可能阻塞无人值守打印
  • 不同门店得到不同结果

生产方案是在中心侧的隔离沙箱中:

  1. 禁止网络和宏。
  2. 限制进程权限、CPU、内存、磁盘和时间。
  3. 安装固定版本转换工具和受控字体集。
  4. 转换为 PDF。
  5. 再次解析页数并生成预览。
  6. 用户确认预览后重新报价和支付。

沙箱转换完成前,继续拒绝 Office 文件比“勉强能打印”更安全。

四、隐私保护

最小化收集

只收集完成打印、支付和售后所需的信息。文件名可能包含姓名、证件号或合同名称,因此普通日志只记录文件 ID、哈希前缀、大小、页数和格式。

访问控制

  • 用户只能读取自己的订单和文件状态。
  • 门店代理只能在有效租约内下载对应任务文件。
  • 门店工作人员默认看不到文件正文。
  • 客服或技术人员临时访问文件需要授权、理由、时限和审计。
  • 对象存储管理员权限与应用访问身份分离。

传输和存储

  • 全程 HTTPS
  • 对象存储服务端加密
  • 数据库敏感字段加密或哈希
  • 短期签名 URL
  • 生产、预发和开发数据隔离

保留时间

建议打印完成后 24 小时内删除文件,并根据真实售后需要尽可能缩短。支付和订单元数据可按财务、争议和法规要求单独保留,但不应因此无限期保存文件正文。

用户权利

小程序应明确说明处理目的、保存时间、第三方服务和删除方式,并提供主动删除入口。正式公开运营前,应完成微信小程序隐私保护指引、个人信息处理规则和必要备案,具体文本由专业法务复核。

五、文件安全检查清单

  • Bucket 默认私有,无法匿名列出或下载
  • 上传 URL 和下载 URL 均短期有效
  • 文件扩展名、MIME 和魔数三者一致
  • PDF 页数和图片尺寸由服务端解析
  • 解析器有超时和资源上限
  • 恶意文件扫描失败时默认拒绝
  • 门店代理再次校验 SHA-256
  • 日志和错误平台没有文件正文
  • 自动删除任务有监控和告警
  • 用户可以看到保留时间并主动删除
  • Office 文件不会在门店代理直接执行

上一篇:数据与防重复下一篇:微信支付