高危漏洞修复功能检查清单.md 12 KB

高危漏洞修复功能检查清单

对应批次:2026-08-06 08:54:02 ~ 08:54:07
仓库ylrz_his_scrm_java
提交数量:10 个 security/docs fix commit
作者:吴树波
用途:测试 / 自检勾选;配套报告见同目录 高危漏洞修复报告.md
说明:本批为高危安全加固(无业务新功能、无本批 SQL 脚本)。companyUI / adminUI 当日上午无对应 08:54 提交。


一、本批提交简表

按时间从早到晚:

# Hash(短) 时间 Message
1 9d0c68c9 08:54:02 fix(security): 修复SQL注入风险
2 c9551cfb 08:54:03 fix(security): 修复上传路径穿越与SSRF
3 cbe52d3c 08:54:03 fix(security): 禁用登录后门并收敛匿名放行
4 49b3cd07 08:54:04 fix(security): 修复会员与名片数据越权
5 909d908a 08:54:04 fix(security): 修复支付回调与跨租户重置密码
6 2d0c50a8 08:54:06 fix(security): 修复XXE风险
7 78ba1b49 08:54:06 fix(security): 关闭Fastjson AutoType并移除硬编码云密钥
8 1aaf380e 08:54:07 fix(security): 修复命令注入风险
9 e4e18fbe 08:54:07 fix(security): 禁止html上传并加固剩余上传入口
10 c1600cf7 08:54:07 docs: 新增高危漏洞修复报告

一句话归纳:SQL 白名单、上传/SSRF、登录后门与匿名放行收敛、销售会员/名片越权、支付回调与重置密码、XXE、Redis Fastjson AutoType、短信密钥外置、命令注入、禁止 html 上传。


二、环境前提(测本批前必读)

# 前提项 说明
1 重启后端 涉及 fs-framework Security、fs-common 工具类、多端 Controller;至少重启 admin、user-app、company / company-app、store、qw-api 等实际部署节点
2 无需本批 SQL 无表结构变更,不必执行本批 DDL/DML
3 短信密钥 tencent.cloud.secret-id / secret-key 须配置(环境变量 TENCENT_CLOUD_SECRET_ID / TENCENT_CLOUD_SECRET_KEY 或 yml);未配置则发短信报「腾讯云短信密钥未配置」
4 后门已禁用 万能验证码已清空;/loginByUserId/loginTest 固定 403。请用真实短信,勿再依赖旧后门
5 清 Token 重登 建议清浏览器/App 旧 Token 后重登;匿名已取消的接口未带 Token 会 401
6 Redis / AutoType 各端 Fastjson 关闭 AutoType;若出现反序列化异常,清相关 key 或整库测试 Redis 后重登
7 销售端鉴权说明 fs-company-app 仍为 /** permitAll + @Login 拦截(未改为 Spring 强鉴权);销售登录 401 优先查 拦截器/JWT/网关,不要只盯 admin 的 SecurityConfig

三、按模块检查表

检查结果列请填写:通过 / 失败 / 备注。

1. 用户登录 / Token / 匿名放行(cbe52d3c

检查目的 操作步骤 预期结果 失败排查 检查结果
正常短信登录可用 App/H5:发验证码 → 登录 成功拿到 Token,可进首页 接口:登录 Controller(如 /app/... 短信登录);Redis sms:code:{手机};短信密钥配置;日志是否「验证码错误/过期」
万能验证码失效 用历史固定码(如原 EdisonX!@#.+-123)登录 失败(验证码错误/过期) 确认已部署新包;INTERNAL_LOGIN_CODE 为空
验证码一次性 同一验证码登录成功后再登一次 第二次失败 Redis 是否仍有 sms:code:;成功路径应 deleteObject
改密防刷 故意错验证码 ≥5 次后改密 提示「错误次数过多,请30分钟后再试」 Redis sms:fail:{手机} TTL 30 分钟
后门禁用 POST loginByUserId / loginTest 403「该接口已禁用」;日志 warn 是否打到旧节点;日志关键字 已禁用的高危接口
原匿名上传需鉴权 无 Token 调 /common/uploadOSS**uploadWangchat/upload/uploadFiledownload**unbindQwUserByServerIds 401(需认证) SecurityConfig 是否生效;网关是否绕过
支付/回调仍可匿名 无 Token 访问仍应匿名的支付/短信等路径(配置里保留的) 能进回调逻辑(签名另验) 对比 SecurityConfig 仍保留的 .anonymous() 列表
Swagger/Druid 生产环境无 Token 访问 swagger/druid 401,不可再匿名打开 若仍通:可能未重启或另有网关放行

2. 销售端会员 / 名片 / 权限(49b3cd07

检查目的 操作步骤 预期结果 失败排查 检查结果
改自己名下会员 销售 A 改归属自己的会员昵称/备注 成功 company-app 日志;FsUserController;关系表 fs_user_company_user
越权改他人会员 销售 A 用 B 的会员 id 调修改/启停 「无权操作该会员」 是否带正确 Token;checkUserCompanyUserOwnership
批量启停 批量含他人联系人 id 整批拒绝 同上
删自己名片 删本人 cardId 成功 UserController.delMyCard
越权删名片 删他人 cardId 「无权删除他人名片」或名片不存在 同上
getUserList 需登录 @Login Token 调 /getUserList 按拦截器失败(未登录) company-app @Login 拦截器、Token 头
改同事状态 非管理员 / 跨公司调 changeUserState 「仅管理员」或「无权操作其他公司用户」 操作者 isAdmincompanyId

销售登录 401 补充:本批未改 company-app 的 permitAll。若登录后业务接口 401:查 JWT 是否写入、拦截器白名单、网关鉴权;对比是否误走了 admin SecurityConfig 域名。

3. 支付回调与后台重置密码(909d908a

检查目的 操作步骤 预期结果 失败排查 检查结果
微信回调单笔单账 各业务前缀订单真实/沙箱支付(inquiry/store/package/course/appvip/integral/product/payment) 仅对应业务入账一次,无串账 WxPayController 日志;订单状态;未知前缀有 warn
汇付回调验签 合法回调 vs 篡改 sign/空 sign 合法成功;非法返回 fail,error 日志「验签失败」 /hfPayNotifyBasePay.HUIFU_DEFAULT_PUBLIC_KEY;日志 汇付回调
跨租户重置密码 无数据权限账号重置他租户用户密码 checkUserDataScope 拦截 admin SysUserController.resetPwd;数据权限配置

4. 上传 / 路径穿越 / 禁 html(c9551cfb + e4e18fbe

检查目的 操作步骤 预期结果 失败排查 检查结果
正常图片/文档/音视频上传 各端常用上传(jpg/png/pdf/mp4 等) 成功返回 URL OssUploadSecurityUtils;文件后缀白名单
拒绝 html/htm/jsp 上传 .html/.htm 失败(不支持类型) MimeTypeUtils 已去掉 html;各 upload 入口
路径穿越文件名 文件名含 ../\ 拒绝「文件名非法」 OSS 工具类校验
达人上传需登录 无 Token 调达人 uploadOSSTalent 未登录失败;登录后正常 TalentController @Login
知识库文件名 上传带特殊字符中文名 清洗后可上传,过长截断 ChatDatasetFileController

5. SSRF / 声纹 / FastGpt(c9551cfb

检查目的 操作步骤 预期结果 失败排查 检查结果
内网 URL 拒绝 声纹/拉 URL 填 http://127.0.0.1 或内网 IP 「禁止访问内网或本地地址」 UrlSecurityUtilsCompanyUserController / FastGpt urlToFile
合法公网 HTTPS 正常公网资源 仍可用 DNS/网络;是否误伤内网依赖(若有)

6. SQL 注入防护(9d0c68c9

检查目的 操作步骤 预期结果 失败排查 检查结果
订单列表正常排序 商城/直播订单列表 asc/desc 列表正常 对应订单列表接口;参数 sortOrder
非法 sortOrder asc;drop... 业务异常「排序方向非法」 SqlSafeUtils.validateOrderDirection
直播趋势 category 合法:page_views 等;非法字符串 合法出图;非法拒绝 LiveDataServiceImpl;白名单五列

7. 企微 XML / XXE(2d0c50a8

检查目的 操作步骤 预期结果 失败排查 检查结果
正常企微回调 触发正常消息/事件回调 解析成功、业务照常 QwControllerXMLParse
(安全)带 DOCTYPE 的恶意 XML 若可测 解析失败,不读外部实体 应用日志 Parser 异常

8. Redis Fastjson AutoType / 短信密钥(78ba1b49

检查目的 操作步骤 预期结果 失败排查 检查结果
登录与缓存读写 登录、读用户缓存、常见列表 无 AutoType 反序列化炸栈 异常堆栈含 Fastjson;清 Redis 后重试
短信发送 配置密钥后发验证码 成功 未配置则明确错误;查 yml/环境变量

9. 音视频 / 直播命令执行(1aaf380e

检查目的 操作步骤 预期结果 失败排查 检查结果
语音转 silk / ffmpeg 相关 走原语音消息转换、点播转码、直播推流 功能与改前一致 服务器是否有 silk/ffmpeg;ProcessBuilder 相关 ERROR 日志;路径含空格场景

四、相邻批(非本批,勿与 08:54 混验)

若联调覆盖「小程序校验文件 / 飞书 Redis」,请按 2026-08-05 下午 单独验证:

仓库 Hash 时间 Message
java 7fd8ce05 08-05 16:24 删除不用的配置文件,销售端新增小程序,上传校验文件(含 uploadMiniappVerifyFileFeiShuService Redis 索引失效)
companyUI 2e1aad25 08-05 16:33 同上(播放源配置:添加小程序、上传校验文件 UI)

【相邻批】小程序校验文件(08-05,非 08:54)

检查目的 操作步骤 预期结果 失败排查 检查结果
销售后台上传校验文件 companyUI「播放源配置」→ 上传校验文件 原名落盘;列表显示 verifyFileName 后端 POST /app/common/uploadMiniappVerifyFile;配置 fs.miniappVerifyPath;落盘机磁盘权限;common-api 日志
微信校验可访问 用微信要求的 URL 访问校验文件 HTTP 200、内容正确 Nginx/静态目录是否指向同一路径

【相邻批】飞书 Redis 缓存(08-05,非 08:54)

检查目的 操作步骤 预期结果 失败排查 检查结果
创建免授权文档缓存 生成飞书直链文档 Redis 有 feishu:direct_doc:*,并登记 feishu:direct_doc:index:* FeiShuService 日志「创建并缓存飞书免授权文档」
一键群发强制刷新 补发/强制刷新飞书链接 旧缓存删除,usedIndex=true 时按索引删;日志「删除完成」 日志字段 usedIndex/deleted;勿再依赖 SCAN;索引缺失时走有界兜底(最多 shard 500)

五、建议冒烟顺序

  1. 配置短信密钥并重启相关后端
  2. 用户真实短信登录(含后门 403、万能码失效抽检)
  3. 销售端会员/名片:正常操作 + 越权各一单
  4. 常用上传(正常类型成功;html 拒绝)
  5. 一笔支付回调(有环境再测;汇付验签抽检)
  6. 订单列表排序(正常 asc/desc + 非法 sortOrder)
  7. (若已发 8/5)小程序校验文件与飞书刷新

六、文档与提交说明

说明
报告文档 c1600cf7 新增 docs/高危漏洞修复报告*.md,联调时以报告为修复依据
本文件 功能检查勾选表,可直接打印或复制到测试用例库

检查人:_______ 日期:____ 环境:_______