# 补充修复报告:不影响业务逻辑的安全加固 > **筛选原则**:只修复「正常请求路径不变、仅加固防护」的漏洞;不改权限体系、不改鉴权模型、不强制变更业务流程。 > **完成时间**:2026-08-06 > **编译验证**:`mvn -pl fs-common,fs-framework,fs-service,fs-user-app,fs-company,fs-qw-api,fs-admin,fs-qwhook -am compile -DskipTests` 通过 --- ## 一、本轮筛选结论 | 类型 | 是否本轮修复 | 原因 | |------|--------------|------| | XXE 禁用 DTD | **已修** | 仅加强 XML 解析器特性,正常企微明文 XML 不受影响 | | Runtime.exec → ProcessBuilder | **已修** | 命令参数相同,仅调用方式更安全 | | 禁止 html/htm 上传/下载白名单 | **已修** | HIS 业务一般不需要上传可渲染 HTML;可阻断存储型 XSS | | 剩余裸 uploadOSS | **已修** | 复用已有白名单工具,合法类型仍可用 | | 安全响应头 nosniff | **已修** | 仅增加响应头,不影响业务数据 | | 知识库上传文件名清洗 | **已修** | 仅过滤危险字符,中英文名仍可用 | | Jackson DefaultTyping 收紧 | **未改** | 可能影响 Redis 历史缓存反序列化,风险大于收益,需单独评估 | | 后台补 `@PreAuthorize` | **未改** | 依赖权限点配置,可能造成后台 403 | | fs-company-app `/**` permitAll | **未改** | 改动会冲击现有 `@Login` 拦截体系 | | 跨租户 companyId 强制覆盖 | **未改** | 可能影响运营超管跨公司操作 | --- ## 二、已修复明细 ### 1. XXE(中危-01 等) | 文件 | 改动 | |------|------| | 新增 `fs-common/.../XmlSecurityUtils.java` | 统一禁用 DTD/外部实体 | | `fs-qw-api/.../QwController.java` | 使用 `XmlSecurityUtils.newSafeDocumentBuilder()` | | `fs-service/.../qwApi/util/XMLParse.java` | 补齐与官方安全示例一致的 feature | **影响**:正常企微回调 XML 无 DOCTYPE,解析结果不变。 ### 2. 命令注入(中危-03/04/05) | 文件 | 改动 | |------|------| | `HuaweiVodServiceImpl` / `HuaweiObsServiceImpl` | `Runtime.exec(拼接串)` → `ProcessBuilder` 参数数组 | | `AudioUtils`(company / qwhook / qwhook-msg / qwhook-sop / fastgptApi) | silk 编码改为 `ProcessBuilder` | | `ProcessManager` + `LiveServiceImpl#buildFFmpegCommand` | 改为 `List` 传参,路径不再被空格拆开 | **影响**:ffmpeg / silk 参数语义不变,路径含空格时反而更稳。 ### 3. 存储型 XSS / 上传(中危-07、剩余高危-08) | 文件 | 改动 | |------|------| | `MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION` | **移除 `html`/`htm`**(保留 txt/文档/图片/视频/pdf) | | `fs-qw-api/.../CommonController#uploadOSS` | 接入 `OssUploadSecurityUtils` | | `fs-user-app/.../CommonScrmController#uploadOSS` | 接入 `OssUploadSecurityUtils` | **影响**:若业务确有上传 `.html` 页面需求会被拒绝;常规图片/文档/音视频不受影响。 ### 4. 响应头(低危 nosniff) | 文件 | 改动 | |------|------| | `fs-framework/.../SecurityConfig.java` | 增加 `.headers().contentTypeOptions()` | **影响**:仅增加 `X-Content-Type-Options: nosniff`,不影响接口数据。 ### 5. 知识库文件名(中危-10) | 文件 | 改动 | |------|------| | `fs-admin` / `fs-company` `ChatDatasetFileController#getFileNameWithoutExtension` | 白名单过滤危险字符,长度限制 50 | **影响**:含特殊符号的文件名会被清洗,中英文与数字下划线不受影响。 --- ## 三、明确跳过(避免影响使用) 1. **Jackson `activateDefaultTyping(LaissezFaire...)`** 全仓库大量 RedisConfig 使用,贸然改为白名单可能导致登录态/缓存读失败。建议单独做兼容验证后再改。 2. **垂直越权补权限注解 / 强制 companyId** 会改变后台可见数据范围或触发 403,需产品与权限表配合。 3. **优惠券竞态加分布式锁** 属逻辑增强,可能改变高并发领取时序,需业务确认。 4. **下载接口去掉客户端 `delete` 参数** 若前端依赖该参数清理临时文件,直接删除会改变行为;建议业务确认后改。 --- ## 四、建议回归点(轻量) 1. 企微回调是否正常(XXE 加固后) 2. 上传图片/PDF/xlsx/mp4 是否正常;确认 `.html` 被拒绝符合预期 3. 语音转 silk / 视频 ffmpeg 合并是否正常 4. 直播录播推流(FFmpeg List 传参)是否正常 5. 知识库 Excel 导入文件名是否正常显示 --- ## 五、总结 本轮只做了**无感安全加固**:XXE、命令执行方式、html 上传封禁、剩余 OSS 白名单、nosniff、文件名清洗。 不涉及鉴权模型、权限点、支付主流程、租户隔离策略,正常业务使用面基本不受影响。