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