高危漏洞修复功能检查清单
对应批次: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**、uploadWang、chat/upload/uploadFile、download**、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 |
「仅管理员」或「无权操作其他公司用户」 |
操作者 isAdmin、companyId |
|
销售登录 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 日志「验签失败」 |
/hfPayNotify;BasePay.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 |
「禁止访问内网或本地地址」 |
UrlSecurityUtils;CompanyUserController / FastGpt urlToFile |
|
| 合法公网 HTTPS |
正常公网资源 |
仍可用 |
DNS/网络;是否误伤内网依赖(若有) |
|
6. SQL 注入防护(9d0c68c9)
| 检查目的 |
操作步骤 |
预期结果 |
失败排查 |
检查结果 |
| 订单列表正常排序 |
商城/直播订单列表 asc/desc |
列表正常 |
对应订单列表接口;参数 sortOrder |
|
| 非法 sortOrder |
传 asc;drop... 等 |
业务异常「排序方向非法」 |
SqlSafeUtils.validateOrderDirection |
|
| 直播趋势 category |
合法:page_views 等;非法字符串 |
合法出图;非法拒绝 |
LiveDataServiceImpl;白名单五列 |
|
7. 企微 XML / XXE(2d0c50a8)
| 检查目的 |
操作步骤 |
预期结果 |
失败排查 |
检查结果 |
| 正常企微回调 |
触发正常消息/事件回调 |
解析成功、业务照常 |
QwController、XMLParse |
|
| (安全)带 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 |
删除不用的配置文件,销售端新增小程序,上传校验文件(含 uploadMiniappVerifyFile、FeiShuService 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) |
|
五、建议冒烟顺序
- 配置短信密钥并重启相关后端
- 用户真实短信登录(含后门 403、万能码失效抽检)
- 销售端会员/名片:正常操作 + 越权各一单
- 常用上传(正常类型成功;html 拒绝)
- 一笔支付回调(有环境再测;汇付验签抽检)
- 订单列表排序(正常 asc/desc + 非法 sortOrder)
- (若已发 8/5)小程序校验文件与飞书刷新
六、文档与提交说明
| 项 |
说明 |
| 报告文档 |
c1600cf7 新增 docs/高危漏洞修复报告*.md,联调时以报告为修复依据 |
| 本文件 |
功能检查勾选表,可直接打印或复制到测试用例库 |
检查人:_______ 日期:____ 环境:_______