6.5 KiB
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.xmlbackend/ruoyi-modules/ruoyi-hq/pom.xmlbackend/ruoyi-modules/ruoyi-rs/pom.xmlbackend/ruoyi-modules/ruoyi-cw/pom.xmlbackend/ruoyi-modules/ruoyi-xg/pom.xmlbackend/ruoyi-modules/ruoyi-zsjy/pom.xmlbackend/ruoyi-modules/ruoyi-jcbt/pom.xmlbackend/ruoyi-modules/ruoyi-xskh/pom.xmlbackend/ruoyi-modules/ruoyi-bzrkh/pom.xmlbackend/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.javamobile/src/api/enrollment.jsmobile/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.vuebackend/ruoyi-admin/src/main/java/org/dromara/web/controller/CasController.javadocs/开发文档/统一身份认证接入说明.md(同步说明)
对登录影响:无(前端本未使用 secret;日志脱敏不改换票逻辑)。
未做(后续建议):
- 后端
CLIENT_SECRET配置外置 + 向 CAS 轮换密钥 /cas/accessTokenIP 限流
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.javabackend/ruoyi-admin/src/main/resources/application.ymldocs/开发文档/API/招聘模块API.md
影响:招聘门户投递须先登录;/rs/job/public/** 公开浏览不受影响。
三、部署与验证清单
- 重新编译打包后端(demo 依赖变更需完整构建),部署后重启。
- 前端若已发布含 CAS secret 的旧包,需重新构建发布
web。 - 移动端报名相关改动需重新发布
mobile。 - 抽查:
POST /rs/init/update-menu无 Token → 401/swagger-ui.html、/api-docs不可用/demo/mail/**→ 404GET /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
主题:安全扫描修改