# 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 **主题**:安全扫描修改