You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Firebase Storage的购物网站如何防范客户端篡改上传发票?

首先明确一个前提:你不可能完全阻止用户查看、篡改前端JS代码,所有运行在客户端的代码本质上都是用户可访问、可修改的,不要把核心校验逻辑放在前端,必须靠服务端/规则层面的管控解决风险。

Firebase 安全规则可实现的管控措施

安全规则可以解决大部分非法上传的问题,你可以配置以下规则逻辑:

  • 限制上传路径:要求所有发票只能上传到固定格式的路径,比如/invoices/{用户ID}/{订单ID}.pdf,规则中校验当前登录用户的ID和路径中的用户ID一致,确保用户只能上传自己订单的发票,无法操作其他人的文件。
  • 限制文件属性:通过规则限定仅允许上传PDF格式文件,比如request.resource.contentType == 'application/pdf',同时限制单文件大小不超过合理阈值,避免恶意上传大文件占用存储空间。
  • 关联真实订单校验:要求上传文件时必须携带订单ID、订单金额等自定义元数据,规则中可以直接关联Firestore中存储的真实订单数据做匹配,确保当前上传的发票对应的订单真实存在,且属于当前登录用户。
  • 禁止修改已上传文件:配置规则仅允许创建新文件,不允许修改、删除已经上传成功的发票,避免用户后续篡改已经生效的账单。
彻底规避篡改风险的方案

如果对发票真实性要求很高,建议直接把发票生成逻辑从前端迁到服务端:
使用Firebase Cloud Functions,用户申请开票时触发云函数,云函数直接从数据库拉取对应订单的真实数据生成PDF,直接写入Firebase Storage,整个过程不需要客户端参与文件上传,从根源上杜绝发票被篡改的可能。

如果一定要保留前端生成发票的逻辑,可以增加后置校验环节:配置Storage的文件上传触发器,用户上传完成后自动触发云函数,云函数解析PDF内容和对应订单的真实数据做比对,内容不符直接删除异常文件,同时触发异常告警。

前端防篡改的补充说明

前端代码最多只能做混淆、加密等处理提高用户篡改的门槛,做不到100%防篡改,永远不要信任前端提交的任何数据,所有核心校验逻辑必须在服务端或安全规则层面落地。

内容的提问来源于stack exchange,提问作者Satyam Mishra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.11 05:12:01