题目重点:把模块功能转成业务不变量,按越权、隔离、并发和故障制定测试矩阵。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 训练系统含数据连接配置、用户与角色权限;真实项目细节未给,案例须替换为本人经历。
- 权限由服务端执行,不能把UI隐藏当安全保证。
解题路线
- 先讲每模块保护的资产与不变量:连接不能泄露凭证或串租户,用户生命周期要可追踪,权限判断要最小授权且拒绝默认。列接口再逐项判断风险,避免只报“增删改查”。
- 数据连接覆盖参数校验、认证失败、超时、网络中断、重连、连接池耗尽、并发使用和关闭;凭证脱敏、轮换后失效和租户隔离同样是功能正确性,不只是安全附加题。
- 用户管理覆盖重复标识、禁用/删除、会话注销、密码或身份提供方变更,以及事务部分失败。删除用户后残留权限/长效token要按政策验证。
- 权限管理用角色×资源×动作×租户矩阵覆盖允许与拒绝,加入对象级越权和管理权限升级;在缓存、会话或token仍旧时撤权传播也要明确窗口。
- 组合场景比孤立CRUD更关键:管理员撤权同时用户执行导出、连接归属迁移、账号禁用后在途任务;核对服务端线性化/允许延迟合同并检查审计日志。
- 自动化分层用单测覆盖policy规则,契约/集成测接口和数据库,端到端验证少量主流程;测试数据隔离和清理避免跨用例污染,用可观测request/tenant标识追踪失败。
- 回答项目贡献用真实发现的风险、复现与改进,不编造漏洞和收益。若面试追问具体模块,可先给风险排序依据和缺证据项,再展示测试样例。
手动走一遍
用户A改请求中的resourceId访问用户B连接,即使页面不显示B资源,服务端仍必须拒绝。撤销A角色后旧token是否立即失效或允许短窗口要事先定;测试在窗口前后验证而不是自行猜政策。
规模与取舍
矩阵大小按角色R、资源类型T、动作A与租户场景增长,先按风险覆盖关键拒绝与跨租户组合;性能关注连接池和权限缓存尾延迟,权限正确性不能用吞吐代替。
易错点与追问
容易失分的边界
- 只测按钮隐藏。
- 只列CRUD不讲风险不变量。
- 撤权缓存延迟没有明确预期。
继续深挖
- 如何测权限缓存失效?
- 测试数据怎样隔离租户?
- 风险优先级如何决定发布门槛?
