状态机检查看什么
多步业务流程(审批、实名认证、售后、开票、报销)每一步都应在服务端校验前置状态:只有待审核状态才能审批,只有已支付才能退款。高频问题是服务端信任前端传回的步骤标识,导致跳过中间环节直达终态;另一个常见问题是乱序调用,先调终态接口再补前置动作。检查方法是梳理状态与接口映射,然后在测试数据上尝试跳步。
基本信息
| 适用对象 | 审批链、实名认证、售后与退款、开票、报销流程 |
|---|---|
| 检查方法 | 先梳理状态与接口映射,再尝试乱序与跳步调用 |
| 判定标准 | 非法状态迁移被服务端按规则拒绝并留审计记录 |
| 参考标准 | OWASP WSTG-BUSL-06、CWE-841 |
典型使用场景
- 线上审批与合同签署流程的逻辑核查
- 售后与退款流程是否存在跳过审核的路径
- 实名认证与风控流程能否被绕过
- 复杂订单状态(部分发货、部分退款)的一致性验证
- 为服务端状态机重构提供现状清单
验证步骤
验证步骤
1. 梳理流程状态与对应接口,记录正常调用顺序(画成状态迁移图)
2. 在测试数据上尝试乱序调用:先调终态接口,再补前置动作
3. 尝试跳步调用:跳过审核直接进入已完成、跳过支付直接发货
4. 观察服务端是否正确拒绝,以及是否留下审计日志
5. 记录:接口、调用顺序、返回结果、最终数据状态状态与非法迁移
| 状态迁移 | 期望行为 | 常见问题 |
|---|---|---|
| 待审核 → 已通过 | 校验审批权限与前置条件 | 任意角色可审批 |
| 未支付 → 已发货 | 拒绝并提示状态错误 | 仅按请求参数放行 |
| 已退款 → 再次退款 | 幂等拒绝 | 重复退款 |
| 已关闭 → 重新激活 | 需明确的重开流程 | 任意接口可改回激活 |
| 已完成 → 修改金额 | 禁止修改或走变更流程 | 状态与金额脱钩 |
修复视角:状态迁移集中在服务端一处管控,前端只展示可用操作;非法迁移统一返回错误并写入审计日志,便于事后追溯。
测试跳步请使用测试数据与测试工单:在生产单据上验证会造成流程混乱,也可能触发真实的资金或货物动作。