提交
This commit is contained in:
1 parent
5fd0042068
commit
1e6dcb164c
94 files changed
+796
-312
No files matched your search
@@ -0,0 +1,174 @@
|
||||
# 20260922 安全扫描修改
|
||||
|
||||
> 针对扫描报告中免登录接口暴露、敏感信息泄露及可写风险的整改记录。
|
||||
> 扫描样例:`GET /prod-api/zsjy/enrollment/info/query?examNumber=123456` 可免登返回身份证、手机号等。
|
||||
|
||||
## 一、本次处理范围
|
||||
|
||||
| 优先级 | 项 | 处理结果 |
|
||||
|--------|----|----------|
|
||||
| P0 | `POST /rs/init/update-menu` 未授权改菜单 | **已整改** |
|
||||
| P0 | Swagger `/api-docs`、`/swagger-ui/**` | **已下线** |
|
||||
| P0 | Demo `/demo/mail/**`、`/demo/queue/delayed/**` | **已下线(运行包不再引入)** |
|
||||
| P0 | 招生 5 个免登接口(含扫描点名 `query`) | **已整改**(须登录) |
|
||||
| P1 | `GET /cas/accessToken` 密钥暴露与日志明文 | **部分整改**(前端去 secret + 日志脱敏;后端 secret 外置待做) |
|
||||
| P1 | `POST /rs/application/submit` 匿名滥投 | **已整改**(须登录) |
|
||||
|
||||
---
|
||||
|
||||
## 二、已完成修改明细
|
||||
|
||||
### 1. P0:`POST /rs/init/update-menu` 须登录
|
||||
|
||||
**问题**:标注 `@SaIgnore`,未登录即可删改 `sys_menu` / `sys_role_menu`。
|
||||
|
||||
**修改**:
|
||||
- 移除 `@SaIgnore`
|
||||
- 增加 `@SaCheckPermission("system:menu:edit")`
|
||||
|
||||
**文件**:
|
||||
- `backend/ruoyi-modules/ruoyi-rs/src/main/java/org/dromara/rs/controller/RsInitController.java`
|
||||
|
||||
**验证**:未带 Token → 401;无 `system:menu:edit` → 无权限。
|
||||
|
||||
---
|
||||
|
||||
### 2. P0:Swagger / api-docs 下线
|
||||
|
||||
**问题**:`security.excludes` 放行文档路径,且 `springdoc` 开启,便于枚举全量接口。
|
||||
|
||||
**修改**:
|
||||
- `springdoc.api-docs.enabled` / `swagger-ui.enabled` → `false`
|
||||
- 从 `security.excludes` 移除 `/api-docs`、`/swagger-ui/**`、`/v3/api-docs/**`、`/webjars/**` 等
|
||||
|
||||
**文件**:
|
||||
- `backend/ruoyi-admin/src/main/resources/application.yml`
|
||||
|
||||
**验证**:访问 `/prod-api/swagger-ui.html`、`/prod-api/api-docs` 不可用。
|
||||
|
||||
---
|
||||
|
||||
### 3. P0:Demo 模块下线
|
||||
|
||||
**问题**:`ruoyi-demo` 打入运行包,邮件、延迟队列等接口带 `@SaIgnore`。
|
||||
|
||||
**修改**:注释掉运行路径上所有 `ruoyi-demo` 依赖(admin + 各业务模块),Controller 不再注册。
|
||||
|
||||
**文件**:
|
||||
- `backend/ruoyi-admin/pom.xml`
|
||||
- `backend/ruoyi-modules/ruoyi-hq/pom.xml`
|
||||
- `backend/ruoyi-modules/ruoyi-rs/pom.xml`
|
||||
- `backend/ruoyi-modules/ruoyi-cw/pom.xml`
|
||||
- `backend/ruoyi-modules/ruoyi-xg/pom.xml`
|
||||
- `backend/ruoyi-modules/ruoyi-zsjy/pom.xml`
|
||||
- `backend/ruoyi-modules/ruoyi-jcbt/pom.xml`
|
||||
- `backend/ruoyi-modules/ruoyi-xskh/pom.xml`
|
||||
- `backend/ruoyi-modules/ruoyi-bzrkh/pom.xml`
|
||||
- `backend/ruoyi-modules/ruoyi-aqbw/pom.xml`
|
||||
|
||||
**说明**:源码目录 `ruoyi-modules/ruoyi-demo` 仍保留,默认构建/部署不加载。
|
||||
|
||||
**验证**:`/prod-api/demo/mail/**`、`/prod-api/demo/queue/delayed/**` → 404。
|
||||
|
||||
---
|
||||
|
||||
### 4. P0:招生报名相关 5 个接口须登录(扫描报告点名)
|
||||
|
||||
**问题**:以下接口标注 `@SaIgnore`,未登录即可访问;其中 `query` 仅凭准考证号即可返回身份证、手机号、住址等敏感信息。
|
||||
|
||||
| 方法 | 路径 | 说明 |
|
||||
|------|------|------|
|
||||
| GET | `/zsjy/enrollment/info/query` | 按身份证/准考证查报名 |
|
||||
| POST | `/zsjy/enrollment/info/submit` | 学生提交报名 |
|
||||
| GET | `/zsjy/enrollment/info/myStatus` | 查本人报名状态 |
|
||||
| GET | `/zsjy/enrollment/info/colleges` | 学院列表 |
|
||||
| GET | `/zsjy/enrollment/info/majors/{collegeId}` | 专业列表 |
|
||||
|
||||
**修改**:
|
||||
- 后端:移除上述 5 个方法的 `@SaIgnore`,走统一登录校验
|
||||
- 移动端:去掉 `isToken: false`,请求携带 Token
|
||||
|
||||
**文件**:
|
||||
- `backend/ruoyi-modules/ruoyi-zsjy/src/main/java/org/dromara/zsjy/controller/ZsjyEnrollmentInfoController.java`
|
||||
- `mobile/src/api/enrollment.js`
|
||||
- `mobile/src/pages/enrollment/index.vue`
|
||||
|
||||
**影响**:新生报名页须先登录再查询/提交;未带 Token 访问上述接口返回 401。
|
||||
|
||||
**验证**:
|
||||
- 无 Token 访问 `GET /prod-api/zsjy/enrollment/info/query?examNumber=123456` → 401
|
||||
- 登录后携带 Token 可正常查询/提交
|
||||
|
||||
---
|
||||
|
||||
### 5. P1:CAS 换票 — 前端去 secret + 日志脱敏
|
||||
|
||||
**问题**:
|
||||
- 前端写死 `CAS_CLIENT_SECRET`(虽未参与换票,但会进浏览器包)
|
||||
- 后端日志打印含 secret 的完整 URL、access_token、完整 profile
|
||||
|
||||
**修改**:
|
||||
- 删除前端 `CAS_CLIENT_SECRET`;换票仍只调 `GET /cas/accessToken?code=...`
|
||||
- 前端控制台不再打印含 Token 的响应 body
|
||||
- `CasController` 日志仅保留 base/client_id/长度等非敏感信息;失败响应不再回传 CAS 原始报文
|
||||
|
||||
**文件**:
|
||||
- `web/src/views/login.vue`
|
||||
- `backend/ruoyi-admin/src/main/java/org/dromara/web/controller/CasController.java`
|
||||
- `docs/开发文档/统一身份认证接入说明.md`(同步说明)
|
||||
|
||||
**对登录影响**:无(前端本未使用 secret;日志脱敏不改换票逻辑)。
|
||||
|
||||
**未做(后续建议)**:
|
||||
- 后端 `CLIENT_SECRET` 配置外置 + 向 CAS 轮换密钥
|
||||
- `/cas/accessToken` IP 限流
|
||||
|
||||
---
|
||||
|
||||
### 6. P1:`POST /rs/application/submit` 须登录
|
||||
|
||||
**问题**:`@SaIgnore` + `security.excludes` 放行,可匿名灌简历数据。
|
||||
|
||||
**修改**:
|
||||
- 移除 `@SaIgnore`
|
||||
- 从 `security.excludes` 删除 `/rs/application/submit`
|
||||
- 提交时绑定 `applicantId = LoginHelper.getUserId()`
|
||||
|
||||
**文件**:
|
||||
- `backend/ruoyi-modules/ruoyi-rs/src/main/java/org/dromara/rs/controller/RsApplicationController.java`
|
||||
- `backend/ruoyi-admin/src/main/resources/application.yml`
|
||||
- `docs/开发文档/API/招聘模块API.md`
|
||||
|
||||
**影响**:招聘门户投递须先登录;`/rs/job/public/**` 公开浏览不受影响。
|
||||
|
||||
---
|
||||
|
||||
## 三、部署与验证清单
|
||||
|
||||
1. 重新编译打包后端(demo 依赖变更需完整构建),部署后重启。
|
||||
2. 前端若已发布含 CAS secret 的旧包,需重新构建发布 `web`。
|
||||
3. 移动端报名相关改动需重新发布 `mobile`。
|
||||
4. 抽查:
|
||||
- [ ] `POST /rs/init/update-menu` 无 Token → 401
|
||||
- [ ] `/swagger-ui.html`、`/api-docs` 不可用
|
||||
- [ ] `/demo/mail/**` → 404
|
||||
- [ ] `GET /zsjy/enrollment/info/query?examNumber=123456` 无 Token → 401
|
||||
- [ ] 招生 submit / myStatus / colleges / majors 无 Token → 401
|
||||
- [ ] CAS 统一认证登录仍可用
|
||||
- [ ] `POST /rs/application/submit` 无 Token → 401;登录后可提交
|
||||
|
||||
---
|
||||
|
||||
## 四、相关分项说明(可作附录查阅)
|
||||
|
||||
| 文档 | 内容 |
|
||||
|------|------|
|
||||
| `问题整改/P0-rs-init-update-menu免登整改说明.md` | 菜单更新接口 |
|
||||
| `问题整改/P0-Swagger与Demo下线整改说明.md` | Swagger / Demo |
|
||||
| `问题整改/P1-CAS换票密钥与日志脱敏整改说明.md` | CAS |
|
||||
| `问题整改/P1-rs-application-submit须登录整改说明.md` | 应聘提交 |
|
||||
|
||||
---
|
||||
|
||||
**文档日期**:2026-09-22
|
||||
**主题**:安全扫描修改
|
||||
Reference in new issue
Block a user