Tenant Security

租户安全

平台同时承载多个商家的店铺、商品、订单与资金数据。本文说明租户之间如何隔离、身份与权限如何校验、支付凭证如何保护,以及平台在审计、风控与数据保护上的做法。

最近更新:2026-09-17

01多租户数据隔离

  • 所有商家侧接口都以登录身份解析出的 merchantId / storeId 收敛查询范围,请求体中的商家标识不能决定数据归属。
  • 商家后台只能访问自己的店铺、商品、订单、退款与资金数据;跨租户读取会直接返回 403。
  • 平台侧角色(超级管理员、财务、风控)可跨租户操作,但每一次跨租户动作都需要对应权限点并写入审计日志。
  • 店铺前台(买家侧)只暴露已发布页面与在售商品,草稿、审核中与已下架内容不可见;未激活店铺会显式标注为「仅预览」。
设计原则
服务端永远以「会话身份 + 资源归属」双重校验决定可见性与可写性,而不是信任前端传入的 ID。

02身份认证与权限模型

环节做法
登录邮箱或手机号 + 密码登录,密码使用 bcrypt 哈希存储;连续失败与账号禁用状态都会返回统一错误提示
会话JWT 写入 httpOnly Cookie(SameSite=Lax,生产环境要求 HTTPS),同时在服务端保存会话记录,可随时撤销
退出退出登录会撤销该账号的全部有效会话并清除 Cookie,客户端随即回到游客态
角色区分商家角色(所有者 / 运营)与平台角色(超级管理员 / 财务 / 风控),后台菜单与接口权限按权限点校验
越权防护接口层统一校验角色与资源归属,避免出现「知道 ID 就能读」的越权路径

03密钥与凭证保护

  • 支付通道凭证(客户端 ID、商户私钥、平台公钥、网关地址)在平台后台维护,私钥以 AES-256-GCM 加密后落库。
  • 保存时会校验密钥格式(私钥需为可解析的 PKCS#8,公钥需为 X.509),格式错误直接拒绝保存,避免线上支付才暴露问题。
  • 读取接口只返回掩码(形如 abcd****wxyz)与「来源:数据库 / 环境变量」,任何页面都不回显明文私钥。
  • 代码库不包含任何商户密钥;本地开发通过环境变量提供,生产环境通过平台后台或密钥管理服务注入。
凭证轮换
建议按季度或在人员变动后轮换支付凭证与会话密钥;轮换期间旧凭证失效,请先在支付机构侧确认新凭证可用。

04审计与风控

能力记录内容用途
审计日志操作者、动作、资源类型与 ID、请求 ID、时间资金、权限、配置变更的追溯
支付回调日志通道、事件类型、验签结果、原始报文、处理结果对账与纠纷取证
风控事件风险类型、命中规则、处置结果(如异常退款率、异常登录)人工复核与自动限制
请求 ID每个请求的 requestId 贯穿前后端与日志问题定位与跨服务串联

05数据保护与权限收敛

  • 最小化收集:仅收集交易与履约必需的信息,联系方式只在订单维度使用。
  • 传输与存储:生产环境强制 HTTPS;敏感配置加密存储;数据库不直接暴露公网。
  • 权限收敛:数据库、对象存储、支付后台均按最小权限分配,离职或换人后立即回收。
  • 备份与恢复:定期备份数据库并演练恢复流程;账本为追加式,恢复后可用分录重建余额。
  • 删除与导出:用户可申请导出或删除账号数据,涉及交易与账务的记录按法规要求保留最低期限。

06部署侧安全加固清单

  • 开启 HTTPS 并在反向代理层启用 HSTS、合理的安全响应头与访问频率限制。
  • 为商家后台与平台后台启用独立域名或 IP 白名单,避免与店铺前台共用无限制入口。
  • 生产环境关闭演示账号与测试卡密,替换种子数据中的示例内容。
  • 为数据库与缓存设置强口令并限制来源网段;关闭数据库的公网端口。
  • 接入日志与告警:支付失败率、回调验签失败、异常退款率、后台异常登录等指标需要有人值守。
  • 上线前执行一次权限梳理:后台账号、支付凭证、对象存储密钥逐项确认归属与有效期。
发现安全问题时,请第一时间联系平台方并保留证据;平台会按合规与信任中描述的流程进行处置与回复。