# 安全漏洞自查工作自证材料

报告日期：2026-06-24  
项目名称：LSERP-MES / WebErp Java 后端  
报告用途：企业定期安全漏洞自查、风险识别记录、风险规避与处置方案留档  
报告性质：代码与配置层面的自查材料，不替代第三方渗透测试、等保测评或生产环境安全审计。

## 1. 项目概况与扫描范围

本次自查覆盖当前工作区 `E:\JavaBackend\Java_DmK` 下的 Java 后端项目，重点模块为：

| 范围 | 说明 |
| --- | --- |
| `WebErp/pom.xml` | Maven 父模块、依赖管理、仓库配置 |
| `WebErp/weberp/pom.xml` | Spring Boot 子模块、运行依赖、构建配置 |
| `WebErp/weberp/src/main/resources/application.properties` | 应用端口、数据源、Redis、JWT、连接池及资源治理配置 |
| `WebErp/weberp/src/main/java/org/example` | 认证授权、接口分发、文件上传下载、SQL、脚本、XML、资源管理等业务代码 |
| `WebErp/weberp/src/main/resources/mapper` | MyBatis XML 映射与动态 SQL |
| `WebErp/weberp/src/test/java/org/example` | 安全与资源治理回归测试 |

本次自查重点覆盖以下风险域：

- 第三方组件与依赖漏洞。
- 明文敏感配置与凭证泄露风险。
- 认证授权、CSRF、CORS、接口开放面。
- SQL 注入与动态 SQL 拼接。
- 文件上传、下载、路径穿越、压缩包解压。
- 脚本执行、XML 反序列化、系统命令调用。
- 资源泄漏、缓存与线程池治理。

## 2. 自查方法与证据来源

| 方法 | 证据说明 |
| --- | --- |
| 静态文件扫描 | 使用 `rg` 对认证、文件、SQL、脚本、XML、敏感配置等关键字进行扫描。 |
| 依赖清单抽取 | 从 `WebErp/pom.xml`、`WebErp/weberp/pom.xml` 提取直接声明的 Maven 依赖版本。 |
| OSV 漏洞库核验 | 使用 OSV API 对已声明依赖版本进行公开漏洞匹配。 |
| 代码证据复核 | 抽查 Spring Security、CORS、文件工具、Zip 工具、JWT、脚本执行、测试用例等关键文件。 |
| 回归测试证据核对 | 识别已有安全回归测试覆盖点，包括路径穿越、Zip Slip、CORS、JWT、资源治理等。 |

环境限制：

- 当前扫描环境未发现可用 `mvn` 命令，因此未执行 `mvn test`、Maven 依赖树生成或 OWASP Dependency-Check。
- Git 状态读取触发 safe.directory 所有权保护，本次报告不依赖 Git 状态作为证据。
- OSV 查询基于 POM 中直接声明或可解析的依赖，不代表完整运行时传递依赖的最终结论；后续应补充完整依赖树扫描。

## 3. 风险识别记录台账

| 编号 | 风险名称 | 位置 | 等级 | 影响 | 现状证据 | 处置方案 | 优先级 |
| --- | --- | --- | --- | --- | --- | --- | --- |
| R-001 | Jackson 组件存在公开漏洞 | `WebErp/pom.xml`、`WebErp/weberp/pom.xml` 中 Jackson 2.18.3 | 高 | 可能导致反序列化绕过、SSRF、拒绝服务等风险，取决于业务是否启用相关 Jackson 特性和输入面。 | OSV 命中 `jackson-core`、`jackson-databind` 多条风险：GHSA-72hv-8253-57qq、GHSA-5jmj-h7xm-6q6v、GHSA-hgj6-7826-r7m5、GHSA-j3rv-43j4-c7qm、GHSA-rmj7-2vxq-3g9f。 | 将 Jackson 统一升级到已修复版本，建议优先评估 2.18.9 或与 Spring Boot 版本兼容的更高补丁版本；升级后回归 JSON 序列化、接口响应、文件预览和鉴权流程。 | P0，建议 2026-07-01 前完成 |
| R-002 | SQL Server JDBC 驱动存在公开漏洞 | `WebErp/pom.xml`、`WebErp/weberp/pom.xml` 中 `mssql-jdbc` 12.8.1.jre11 | 高 | 可能受不当输入校验问题影响；若系统连接 SQL Server 或保留相关驱动运行时可用，则存在组件风险。 | OSV 命中 GHSA-m494-w24q-6f7w / CVE-2025-59250，修复版本包含 12.8.2.jre11、12.10.2.jre11 等。 | 若仍需 SQL Server 支持，升级到至少 12.8.2.jre11，建议评估 12.10.2.jre11；若不再使用，移除依赖和相关配置。 | P0，建议 2026-07-01 前完成 |
| R-003 | 数据库连接串包含明文账号密码 | `WebErp/weberp/src/main/resources/application.properties:16` 及注释历史连接串 | 高 | 代码仓库、构建包或日志泄露时可能造成数据库凭证泄露和横向访问风险。 | 配置文件中存在形如 `jdbc:dm://***:****/***?user=***&password=***&host={hostname}` 的连接串；报告已脱敏，不展示真实 IP、账号和密码。 | 迁移到环境变量、启动参数、KMS/密钥管理服务或配置中心；清理注释中的历史账号密码；轮换已暴露账号密码；限制数据库账号权限和来源 IP。 | P0，建议 2026-07-01 前完成 |
| R-004 | 认证入口开放面较大，依赖业务层二次校验 | `SecurityConfig.java:14-44`、各 Controller 的 `@RequestCheck` | 高 | Spring Security 对多组 `/Api/**` 路径 `permitAll`，若业务层注解或反射分发漏配，可能形成未授权访问。 | `SecurityConfig` 仅对未匹配请求 `denyAll`；业务方法依赖 `@RequestCheck(CheckLogin = true/false)` 控制登录态。 | 梳理免登录白名单，仅保留登录、验证码、公开配置等必要接口；对反射分发方法建立默认强制登录策略；为高风险操作增加服务端权限校验测试。 | P0，建议 2026-07-05 前完成 |
| R-005 | CSRF 对核心 API 路径豁免 | `SecurityConfig.java:14-22` | 中 | 如浏览器 Cookie 或会话凭证可跨站携带，写操作接口可能被跨站请求利用。 | 多个 `/Api/**` 路径被配置为 CSRF 忽略；系统同时配置 CORS 凭证支持。 | 对 Cookie 会话场景启用 CSRF Token；若完全使用 Bearer Token，确保 Token 不存放于可被跨站自动携带的 Cookie；对写操作要求 `Authorization` 并校验 Origin/Referer。 | P1，建议 2026-07-10 前完成 |
| R-006 | CORS 允许携带凭证且允许请求头通配 | `CorsConfig.java:15-41` | 中 | 跨域来源若配置过宽，可能扩大凭证使用面和数据读取面。 | CORS 配置指定多个来源、`setAllowCredentials(true)`、`addAllowedHeader("*")`，已有测试覆盖拒绝 TRACE 方法和不暴露所有响应头。 | 将来源列表改为环境化配置；生产环境只保留正式前端域名；限制允许请求头；保留并扩展 CORS 回归测试。 | P1，建议 2026-07-10 前完成 |
| R-007 | MyBatis `${}` 动态拼接存在 SQL 注入风险 | `mapper/PageBreaks.xml`、`mapper/DMCrmMapper.xml`、`mapper/CustomerMapper.xml` | 高 | `${}` 会直接拼接 SQL 文本，若字段名、条件、排序或 SQL 片段来自用户输入，可能导致 SQL 注入。 | 扫描发现 `${sql}`、`${keyName}`、`${condition}` 等动态拼接；部分业务代码也存在大量 `String.format` / 拼接式 SQL。 | 将值参数改为 `#{}`；对表名、字段名、排序、条件片段使用服务端白名单枚举；禁止前端直接传 SQL；对无法立即改造的动态 SQL 增加 `SqlAnalyzer` 校验和审计日志。 | P0，建议 2026-07-05 前完成 |
| R-008 | 远程 URL 下载文件可能形成 SSRF | `FileUploadController.java`、`FileUtil.DownLoadFile`、`downloadFile`、`asyncDownload` | 高 | 若用户可控 URL 被服务端下载，可能访问内网、云元数据地址或敏感管理端口。 | 文件上传逻辑支持 `url` 参数触发远程下载，工具类包含多处 HTTP 下载方法。 | 增加 URL 协议、域名、IP 网段、端口白名单；阻断内网地址、回环地址、链路本地地址、云元数据地址；限制重定向和文件大小；记录下载审计日志。 | P0，建议 2026-07-05 前完成 |
| R-009 | 文件上传类型与路径风险需持续治理 | `FileUtil.java`、`FileUploadController.java` | 中 | 文件类型、文件名、路径校验缺陷可能导致任意文件写入、恶意文件上传或越权读取。 | 已存在扩展名白名单、危险类型黑名单、路径权限校验；测试覆盖伪造根目录名绕过场景。 | 保持服务端真实路径归一化校验；增加 MIME/文件魔数校验；上传目录禁止脚本执行；限制单文件大小和总量；对下载、删除、移动操作统一权限校验。 | P1，建议 2026-07-15 前完成 |
| R-010 | Zip Slip 解压路径穿越风险已识别并有控制 | `ZipUtil.java`、`SecurityRegressionTest.java` | 中 | 恶意压缩包可能通过 `../` 写出目标目录，覆盖系统文件。 | `ZipUtil` 使用目标根路径 normalize 后校验 `startsWith(targetRoot)`；测试覆盖 `../escaped.txt` 解压逃逸。 | 保留现有校验；补充压缩包大小、条目数、单文件大小、解压后总大小限制，防止 Zip Bomb。 | P1，建议 2026-07-15 前完成 |
| R-011 | GraalJS 允许全访问，动态脚本执行面较高 | `JsEngine.java:39-40`、`JsEngine.java:99` | 高 | 若脚本内容或上下文参数可被用户控制，可能造成任意 Java 访问、敏感信息读取或命令执行链。 | `polyglot.js.allowAllAccess` 被设置为 `true`，并执行 `engine.eval(statement, context)`。 | 默认关闭 `allowAllAccess`；只允许执行受控表达式；对脚本来源进行白名单管理；限制执行时间和可访问对象；为脚本执行增加审计日志和安全测试。 | P0，建议 2026-07-05 前完成 |
| R-012 | XML 反序列化需禁用外部实体与 DTD | `XmlUtil.java` | 中 | XML 输入若来自不可信来源，可能存在 XXE、SSRF、文件读取等风险。 | 使用 JAXB `Unmarshaller` 反序列化 XML，当前未显式展示禁用外部实体和 DTD 的配置。 | 使用安全 XML 解析器配置，禁用 DTD、外部实体、外部 schema；限制 XML 大小；对不可信 XML 输入增加测试样例。 | P1，建议 2026-07-15 前完成 |
| R-013 | 系统命令调用需白名单与参数隔离 | `OfficeUtil.java`、`FormatFactoryUtil.java` | 中 | 外部程序路径或参数若可控，可能形成命令执行、权限扩大或路径劫持风险。 | 扫描发现 `Runtime.getRuntime().exec`、`ProcessBuilder` 用于文件权限或格式转换。 | 固定可执行文件路径；参数使用数组传递且禁止拼接 shell；校验文件路径位于工作目录；记录执行日志和失败告警；避免 `chmod 777` 等过宽权限。 | P1，建议 2026-07-15 前完成 |
| R-014 | 资源治理已有控制但需纳入定期复核 | `ResourceGovernanceConfig.java`、`RequestCleanupFilter.java`、`ResourceGovernanceRegressionTest.java` | 低 | 缓存、线程池、动态数据源若失控，可能导致内存泄漏、连接泄漏或拒绝服务。 | 已有缓存容量、JS 缓存容量、线程池队列、动态连接池关闭等配置和回归测试。 | 保留容量上限；接入运行监控；对连接池活跃数、队列积压、缓存命中率和异常关闭建立告警。 | P2，建议 2026-07-31 前完成 |
| R-015 | 构建与依赖治理流程不完整 | 当前环境与 POM | 中 | 缺少稳定的自动化安全扫描会导致漏洞发现滞后。 | 当前机器无 `mvn`；未能生成完整依赖树；OSV 仅覆盖可解析直接依赖。 | 在 CI 中增加 `mvn test`、`mvn dependency:tree`、OSV Scanner 或 OWASP Dependency-Check；每次发版前输出依赖漏洞报告。 | P1，建议 2026-07-15 前完成 |

## 4. 公开漏洞核验结果

本次 OSV 查询命中以下依赖风险：

| 组件 | 当前版本 | 风险编号 | 等级 | 摘要 | 修复版本建议 |
| --- | --- | --- | --- | --- | --- |
| `com.fasterxml.jackson.core:jackson-core` | 2.18.3 | [GHSA-72hv-8253-57qq](https://osv.dev/vulnerability/GHSA-72hv-8253-57qq) | 中 | 异步解析器数字长度约束绕过，可能导致拒绝服务。 | 2.18.6 或更高兼容补丁版 |
| `com.fasterxml.jackson.core:jackson-databind` | 2.18.3 | [GHSA-5jmj-h7xm-6q6v](https://osv.dev/vulnerability/GHSA-5jmj-h7xm-6q6v) | 中 | `@JsonIgnoreProperties` 大小写反序列化绕过。 | 2.18.9 或更高兼容补丁版 |
| `com.fasterxml.jackson.core:jackson-databind` | 2.18.3 | [GHSA-hgj6-7826-r7m5](https://osv.dev/vulnerability/GHSA-hgj6-7826-r7m5) | 中 | `InetSocketAddress` 反序列化可能触发 DNS 解析，引入 SSRF 风险。 | 2.18.8 或更高兼容补丁版 |
| `com.fasterxml.jackson.core:jackson-databind` | 2.18.3 | [GHSA-j3rv-43j4-c7qm](https://osv.dev/vulnerability/GHSA-j3rv-43j4-c7qm) | 高 | 多态类型校验绕过，可能导致任意类实例化。 | 2.18.8 或更高兼容补丁版 |
| `com.fasterxml.jackson.core:jackson-databind` | 2.18.3 | [GHSA-rmj7-2vxq-3g9f](https://osv.dev/vulnerability/GHSA-rmj7-2vxq-3g9f) | 高 | `BasicPolymorphicTypeValidator` 数组子类型白名单绕过。 | 2.18.8 或更高兼容补丁版 |
| `com.microsoft.sqlserver:mssql-jdbc` | 12.8.1.jre11 | [GHSA-m494-w24q-6f7w](https://osv.dev/vulnerability/GHSA-m494-w24q-6f7w) / CVE-2025-59250 | 高 | SQL Server JDBC 驱动输入校验问题。 | 至少 12.8.2.jre11，或升级到 12.10.2.jre11 等兼容修复版本 |

依赖处置原则：

- 同一组件族统一版本，避免 `dependencyManagement` 与子模块显式版本不一致。
- 优先通过 Spring Boot BOM 或统一属性管理版本。
- 升级前备份当前依赖树；升级后执行单元测试、接口冒烟测试、文件预览/转换测试、登录鉴权测试。
- 对暂不能升级的漏洞记录风险接受原因、补偿控制和复核日期。

## 5. 已有安全控制与规避措施

| 控制项 | 当前证据 | 有效性说明 |
| --- | --- | --- |
| 默认拒绝未匹配请求 | `SecurityConfig` 中 `anyRequest().denyAll()` | 可降低非白名单路径暴露面。 |
| 接口级登录校验注解 | `@RequestCheck` 默认 `CheckLogin = true` | 业务层可对方法级别实施登录态、参数、日志控制。 |
| CORS 源白名单 | `CorsConfig` 中使用具体来源模式 | 避免使用 `*` 携带凭证；仍需生产环境收敛来源。 |
| CORS 方法限制 | 已允许常用方法并测试拒绝 TRACE | `SecurityRegressionTest` 覆盖异常方法拒绝。 |
| 响应头暴露收敛 | 暴露固定响应头，不使用 `*` | 已有测试验证不暴露所有响应头。 |
| 文件扩展名黑白名单 | `FileUtil` 中定义允许和禁止类型 | 可阻止常见脚本文件上传；仍需补充 MIME/魔数校验。 |
| 文件路径权限校验 | `FileUtil.checkFileAuthory` | 已有测试覆盖伪造根目录名绕过。 |
| Zip Slip 防护 | `ZipUtil.resolveZipEntryPath` | 解压路径规范化后校验目标目录边界。 |
| JWT 签名初始化 | `JwtHelp` 使用 RSA 签名并有静态初始化测试 | 已有测试覆盖 Spring 构造器未运行时的令牌生成。 |
| 资源治理配置 | 缓存、JS 缓存、线程池、动态连接池上限 | 已有回归测试覆盖容量限制和动态连接池关闭。 |

## 6. 风险处置方案与整改优先级

### P0：立即整改

整改目标：消除高危依赖、凭证泄露、未授权、SQL 注入、SSRF 和高危脚本执行面。

| 事项 | 责任建议 | 截止建议 | 验收标准 |
| --- | --- | --- | --- |
| 升级 Jackson 与 mssql-jdbc | 后端负责人 | 2026-07-01 | OSV/Dependency-Check 不再命中对应漏洞；回归测试通过。 |
| 移除明文数据库凭证 | 运维与后端负责人 | 2026-07-01 | POM、properties、日志和文档中无真实密码；已轮换暴露账号。 |
| 收敛 `permitAll` 与免登录接口 | 后端负责人 | 2026-07-05 | 白名单清单明确；高风险接口必须登录和鉴权；新增未授权访问测试。 |
| 动态 SQL 白名单治理 | 后端负责人 | 2026-07-05 | 用户输入值全部参数化；字段/表名/排序仅来自服务端白名单。 |
| 远程 URL 下载 SSRF 防护 | 后端负责人 | 2026-07-05 | 阻断内网、回环、链路本地、云元数据地址；新增 SSRF 单元测试。 |
| 关闭或限制 GraalJS 全访问 | 架构与后端负责人 | 2026-07-05 | 默认不允许 Java 全访问；脚本来源、对象访问和执行时间受控。 |

### P1：短期治理

整改目标：降低中危配置、解析、上传和命令执行风险。

| 事项 | 截止建议 | 验收标准 |
| --- | --- | --- |
| 生产 CORS 来源环境化和最小化 | 2026-07-10 | 生产仅保留正式域名；测试覆盖非法 Origin。 |
| CSRF 策略复核 | 2026-07-10 | Cookie 会话启用 CSRF；Bearer Token 场景明确禁止跨站自动携带凭证。 |
| XML 安全解析配置 | 2026-07-15 | 禁用 DTD、外部实体和外部 schema；新增 XXE 测试。 |
| 文件上传魔数、大小、目录策略 | 2026-07-15 | 上传目录不可执行；大小限制、MIME/魔数校验和审计日志上线。 |
| 系统命令调用白名单 | 2026-07-15 | 外部程序路径固定；参数数组化；无 shell 拼接；避免过宽文件权限。 |
| CI 安全扫描补齐 | 2026-07-15 | CI 生成测试报告、依赖树、漏洞扫描报告。 |

### P2：持续优化

整改目标：将安全自查固化为周期机制。

| 事项 | 截止建议 | 验收标准 |
| --- | --- | --- |
| 资源治理监控 | 2026-07-31 | 连接池、线程池、缓存、队列积压均有指标和告警。 |
| 安全基线文档 | 2026-07-31 | 形成接口鉴权、SQL、安全配置、上传下载、依赖升级基线。 |
| 安全回归用例扩展 | 2026-07-31 | 覆盖未授权、SQL 注入、SSRF、XXE、文件魔数、上传大小限制。 |

## 7. 定期漏洞自查机制建议

建议建立以下定期自查制度：

| 周期 | 自查内容 | 输出材料 |
| --- | --- | --- |
| 每周 | 依赖漏洞库增量扫描，关注高危/严重漏洞。 | 依赖漏洞扫描记录、风险接受记录。 |
| 每月 | 代码安全关键字扫描，复核认证、SQL、文件、脚本、XML、命令执行。 | 风险识别台账、整改闭环清单。 |
| 每次发版前 | `mvn test`、依赖树、OSV/Dependency-Check、关键接口安全回归。 | 发版安全检查表、测试报告。 |
| 每季度 | 安全基线复核、配置脱敏检查、凭证轮换、最小权限复核。 | 季度安全自查报告、凭证轮换记录。 |
| 重大漏洞公告后 | 针对公告组件和受影响版本快速排查。 | 专项漏洞排查记录、应急处置记录。 |

建议保留的自证材料：

- 自查日期、范围、负责人、扫描工具和命令记录。
- 依赖漏洞扫描原始结果和处置结论。
- 风险台账：风险编号、等级、影响、证据、责任人、计划完成日期、闭环状态。
- 整改前后代码或配置差异。
- 回归测试报告、构建报告、上线验证记录。
- 风险接受审批记录和下次复核日期。

## 8. 后续验证清单

| 检查项 | 命令或动作 | 预期结果 |
| --- | --- | --- |
| Maven 测试 | `mvn test` | 全部测试通过，无失败和错误。 |
| 依赖树 | `mvn dependency:tree` | 输出完整直接与传递依赖，归档为发版证据。 |
| OSV 扫描 | `osv-scanner -r .` 或 CI 中等效工具 | 无高危/严重未处置漏洞；中低危有处置计划。 |
| OWASP Dependency-Check | `dependency-check` Maven 插件或 CI 任务 | 生成 HTML/JSON 报告并归档。 |
| 敏感信息扫描 | secret 扫描工具或 `rg` 关键字扫描 | 无真实密码、Token、Secret、公网连接串。 |
| 安全回归 | 现有 JUnit + 新增未授权/SSRF/XXE/SQL 注入测试 | 关键安全用例稳定通过。 |

## 9. 本次自查结论

本次自查确认项目已具备一定安全治理基础，包括 Spring Security 默认拒绝策略、业务层登录校验注解、CORS 回归测试、文件路径校验、Zip Slip 防护、JWT 初始化测试和资源治理回归测试。

同时，本次自查识别出若干需要优先处置的风险：高危依赖版本、明文数据库凭证、接口开放面依赖业务层校验、动态 SQL 拼接、远程 URL 下载 SSRF 风险以及 GraalJS 全访问脚本执行风险。建议将 P0 风险纳入最近一次安全整改，完成后补跑 Maven 测试、依赖树、OSV/OWASP 扫描，并更新本报告形成闭环记录。

