39 lines
2.2 KiB
Markdown
39 lines
2.2 KiB
Markdown
# 角色权限与越权安全终检报告 (RBAC & Security Final Report)
|
|||
|
|
|
||
|
|
- **报告标识**: `RBAC_SECURITY_FINAL_R4`
|
||
|
|
- **判定结论**:
|
||
|
|
- `FINAL_RBAC_SMOKE = PASS`
|
||
|
|
- `IDOR_LEAK_COUNT = 0`
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 1. 多角色矩阵与访问控制边界
|
||
|
|
|
||
|
|
系统对 5 种典型用户角色实施了严格的最小权限原则 (Least Privilege) 与业务隔离:
|
||
|
|
|
||
|
|
| 角色分类 | 登录测试账号 | 业务档案关联 | 允许访问范围 | 越权防御与阻断表现 |
|
||
|
|
| :--- | :--- | :---: | :--- | :--- |
|
||
|
|
| **超级管理员** | `admin` | 全局教务 | 全部菜单、系统管理、排课住宿、门禁授权 | 具备完整管理权限,关键操作留痕审计 |
|
||
|
|
| **授课教师** | `qa_teacher_a` / `qa_teacher_b` | 教师档案 (`QA_R2_T_01`) | 教师工作台、个人课表、所带班级考勤 | 试图访问 `/system/*` 返回 403;横向修改他人教师档案阻断 |
|
||
|
|
| **在训学员** | `qa_student_a` / `qa_student_b` | 学员档案 (`QA_R2_S_001`) | 学员个人中心、个人课表、考勤明细、住宿床位 | 试图访问管理员与教师路由返回 403;跨账号调宿阻断 |
|
||
|
|
| **未绑定业务角色** | `qa_role_nobody` | 无教师/学员档案 | 仅限登录基础骨架,无任何业务数据视图 | 访问教师/学员中心展示友好告警,不泄露任何人员数据 |
|
||
|
|
| **管理员+教师双身份** | `qa_admin_teacher` | 兼具管理与教师 | 可自由切换系统管理与教师工作台 | 权限正确叠加,双重视图无冲突 |
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
## 2. 水平越权 (IDOR) 穿透测试实证
|
||
|
|
|
||
|
|
针对最容易发生越权的数据修改与明细查询接口进行了自动化安全穿透:
|
||
|
|
|
||
|
|
```
|
||
|
|
[IDOR-TEST-01] Teacher B -> PUT /train/teacher/QA_R2_T_01 (试图篡改 Teacher A 档案)
|
||
|
|
=> HTTP 403 Forbidden: {"msg": "没有权限,请联系管理员授权", "code": 403} [BLOCKED]
|
||
|
|
|
||
|
|
[IDOR-TEST-02] Student B -> POST /train/accommodation/1/transfer (试图跨权发起调宿)
|
||
|
|
=> HTTP 403 Forbidden: {"msg": "没有权限,请联系管理员授权", "code": 403} [BLOCKED]
|
||
|
|
|
||
|
|
[IDOR-TEST-03] Teacher B -> GET /train/teacher/me/lessons/101/attendance (试图查看非所授课次考勤)
|
||
|
|
=> ServiceException: 您并非该课次的授课教师,无权查看出勤记录 [BLOCKED]
|
||
|
|
```
|
||
|
|
|
||
|
|
越权穿透测试结果:`IDOR_LEAK_COUNT = 0`,全量通过。
|