🔐 账户安全与合规设计
本章详述即时配送小程序的账户安全设计、支付安全措施、风控规则、合规要求,以及权限控制与审计日志设计。确保金融操作的安全性与合规性。
安全必选
反洗钱
合规审计
安全红线:涉及资金的操作必须满足以下要求——①身份验证(JWT/支付密码)②操作审计(日志留存5年)③风控拦截(异常检测)④权限分离(审批与执行分离)。
一、账户安全设计
1.1 身份认证体系
| 认证方式 | 适用场景 | 安全级别 |
| 微信登录 | 用户/骑手首次登录 | 高(微信实名验证) |
| JWT Token | 接口访问鉴权 | 中(需配合刷新机制) |
| 支付密码 | 余额支付/提现 | 高(独立密码) |
| 生物识别 | 指纹/面容支付 | 高(设备本地验证) |
| 短信验证码 | 敏感操作二次验证 | 中(可能被劫持) |
1.2 支付安全流程
sequenceDiagram
participant U as 用户
participant APP as 小程序
participant API as 后端服务
participant SEC as 安全风控
participant PAY as 微信支付
U->>APP: 发起支付
APP->>API: 提交支付请求
API->>SEC: 风控检查
SEC->>SEC: 检查账户异常
SEC->>SEC: 检查交易限额
alt 风控拦截
SEC-->>API: 拦截(可疑交易)
API-->>APP: 风控拦截提示
APP-->>U: 提示身份验证
else 风控通过
SEC-->>API: 通过
API->>PAY: 发起支付
PAY-->>API: 支付成功
API->>SEC: 记录交易风控
end
1.3 密码安全策略
| 策略项 | 规则 |
| 支付密码长度 | 6位数字 |
| 密码错误限制 | 连续5次错误锁定30分钟 |
| 密码修改 | 需验证原密码或短信验证码 |
| 密码存储 | SHA256加盐哈希(前端传输用SSL) |
| 无密码提示 | 禁止将密码作为任何信息提示 |
二、风控规则设计
2.1 交易风控规则
| 规则名称 | 触发条件 | 处理方式 |
| 单笔限额 | 单笔超过5000元 | 提示限额,需拆单 |
| 日累计限额 | 单用户日累计超过20000元 | 暂停支付,提示客服 |
| 异地登录检测 | IP地址与常用地不符 | 增加验证码校验 |
| 频繁失败检测 | 5分钟内连续失败3次 | 锁定15分钟后重试 |
| 新设备登录 | 首次使用该设备 | 推送安全通知 |
| 夜间交易 | 23:00-06:00交易 | 增加验证或延迟到账 |
2.2 欺诈检测规则
| 规则名称 | 触发条件 | 处理方式 |
| 账户共用检测 | 同一设备多账号/同IP多账号 | 标记审查,限制提现 |
| 虚假交易检测 | 短时间多笔相同金额 | 冻结账户,人工审查 |
| 洗钱特征检测 | 快进快出、分散转集中 | 上报央行反洗钱系统 |
| 套现检测 | 充值后立即提现 | 延迟提现,标记审查 |
2.3 风控处置措施
flowchart TD
A[触发风控规则] --> B{风险等级}
B -->|低| C[增强验证]
B -->|中| D[延迟处理+通知]
B -->|高| E[拦截+人工审查]
B -->|极高| F[上报监管+冻结账户]
C --> G[验证码/人脸]
D --> H[2小时延时到账]
E --> I[等待人工确认]
F --> J[上报反洗钱系统]
三、合规要求
3.1 反洗钱(AML)合规
监管要求:根据人民银行相关规定,支付机构必须建立反洗钱内部控制制度,对可疑交易进行监测、记录和报告。
| 合规项 | 要求 | 实现方式 |
| 客户身份识别 | 用户注册需实名认证(微信已验证) | 微信openId映射 |
| 大额交易报告 | 单笔50万或日累计200万以上 | 自动标记并上报 |
| 可疑交易监测 | 符合人行可疑交易特征的 | 风控规则+人工审查 |
| 交易记录保存 | 留存5年备查 | 数据库+归档存储 |
| 黑名单管理 | 制裁名单、高风险名单 | 实时黑名单匹配 |
3.2 数据安全合规
| 合规项 | 要求 |
| 数据加密 | 敏感数据(身份证、银行卡)加密存储,传输全程SSL |
| 数据脱敏 | 接口返回手机号脱敏(138****1234) |
| 数据删除 | 用户注销后保留30天后彻底删除(法律要求除外) |
| 隐私政策 | 明确告知用户数据收集和使用范围 |
四、权限控制与审计
4.1 财务权限分离
操作员(发起) → 组长(初审) → 财务(复核) → 出纳(执行)
| | | |
提交申请 审核 最终审批 执行打款
(记录日志) (记录日志) (记录日志) (记录日志)
4.2 敏感操作权限矩阵
| 操作 | 普通运营 | 财务 | 财务主管 | 超级管理员 |
| 查看账单 | ✅ | ✅ | ✅ | ✅ |
| 导出账单 | ❌ | ✅ | ✅ | ✅ |
| 审核退款(<1000) | ✅ | ✅ | ✅ | ✅ |
| 审核退款(>=1000) | ❌ | ❌ | ✅ | ✅ |
| 审批提现 | ❌ | ✅ | ✅ | ✅ |
| 执行打款 | ❌ | ❌ | ✅ | ✅ |
| 调整余额 | ❌ | ❌ | ❌ | ✅ |
| 查看审计日志 | ❌ | ✅ | ✅ | ✅ |
4.3 审计日志要求
| 日志类型 | 记录内容 | 保留时间 |
| 登录日志 | 用户ID、IP、设备、时间、结果 | 5年 |
| 支付日志 | 订单号、金额、时间、支付渠道、状态 | 5年 |
| 资金变动日志 | 用户ID、变动类型、变动金额、余额、操作人 | 5年 |
| 管理操作日志 | 操作人、被操作对象、操作类型、IP、时间 | 5年 |
| 风控日志 | 触发规则、风险等级、处理结果 | 5年 |
五、安全相关数据表
5.1 安全风控记录表 ot_security_log
| 字段 | 类型 | 说明 |
| id | bigint | 主键 |
| user_id | bigint | 用户ID |
| event_type | tinyint | 事件类型(1登录/2支付/3风控/4余额调整) |
| event_name | varchar(50) | 事件名称 |
| risk_level | tinyint | 风险等级(0无/1低/2中/3高/4极高) |
| risk_rule | varchar(100) | 触发规则 |
| ip | varchar(50) | IP地址 |
| device_info | varchar(200) | 设备信息 |
| request_data | text | 请求数据(脱敏) |
| handle_status | tinyint | 处理状态 |
| handle_remark | varchar(200) | 处理备注 |
| created_at | datetime | 创建时间 |
5.2 资金变动审计表 ot_fund_audit
| 字段 | 类型 | 说明 |
| id | bigint | 主键 |
| audit_no | varchar(32) | 审计单号 |
| user_id | bigint | 用户ID |
| user_type | tinyint | 用户类型(1用户/2骑手) |
| change_type | tinyint | 变动类型(1充值/2消费/3退款/4提现/5调整) |
| amount | decimal(12,2) | 变动金额 |
| balance_before | decimal(12,2) | 变动前余额 |
| balance_after | decimal(12,2) | 变动后余额 |
| source_type | varchar(20) | 来源类型 |
| source_id | bigint | 来源ID |
| operator_id | bigint | 操作人ID |
| operator_name | varchar(50) | 操作人姓名 |
| remark | varchar(200) | 备注/原因 |
| created_at | datetime | 创建时间 |
文档同步:requirements_v2.md 安全合规模块 | 维护:项目团队