报告日期:2026-06-25
报告类型:企业安全漏洞定期自查与风险规避自证材料
适用范围:WebErp / weberp Spring Boot 后端项目
报告口径:对外自证,展示已开展的安全自查、已建设的风险规避措施、风险识别记录与后续处置安排。
本次自查对象为 WebErp 后端工程,核心模块为 WebErp/weberp。项目采用 Spring Boot、Maven、多数据库驱动、MyBatis、文件处理、Office 文档转换、远程资源下载、JWT 登录态、GraalJS 表达式执行等能力。
本次自查覆盖以下范围:
| 类别 | 覆盖内容 | 证据来源 |
|---|---|---|
| 依赖与构建 | Maven 父子 POM、依赖树、关键第三方组件版本 | WebErp/pom.xml、WebErp/weberp/pom.xml、weberp/target/dependency-tree.txt |
| 配置安全 | 数据库连接、运行配置、跨域配置、脚本执行开关 | application.properties、CorsConfig.java、JsEngine.java |
| 认证授权 | Spring Security 入口放行、业务层登录校验、公开接口白名单 | SecurityConfig.java、BaseHandler.java、PublicApiRegistry.java |
| SQL 安全 | MyBatis 动态 SQL、SQL 片段校验、字段名白名单 | mapper/*.xml、SqlSafetyGuard.java、SQL Provider 实现 |
| 文件与下载 | 文件路径校验、压缩包解压、远程下载、在线预览 | FileUtil.java、ZipUtil.java、RemoteDownloadGuard.java、ToolsHandler.java |
| 脚本与命令 | GraalJS 沙箱配置、系统命令执行点复核 | JsEngine.java、OfficeUtil.java、FormatFactoryUtil.java |
| 自动化证据 | 安全回归测试、依赖树生成、工具可用性确认 | SecurityRegressionTest.java、Maven 命令执行记录 |
说明:本报告为安全漏洞自查工作留档材料,不等同于第三方渗透测试报告或等保测评报告。
本次自查采用静态代码扫描、配置审阅、依赖版本核验、关键安全控制点测试和公开漏洞库查询相结合的方式。
已执行并形成证据的检查项:
| 检查项 | 方法 | 结果 |
|---|---|---|
| 安全回归测试 | 执行 mvn -q -Dtest=SecurityRegressionTest test | 通过,覆盖路径越权、Zip Slip、CORS、远程下载限制、SQL 片段校验、公开接口白名单等场景 |
| Maven 依赖树 | 执行 Maven dependency tree 并输出到 weberp/target/dependency-tree.txt | 已生成,可用于依赖版本留档 |
| OSV 漏洞查询 | 对关键 Maven 组件进行 OSV API 查询 | 发现 Jackson databind 仍有一项新披露风险需跟踪 |
| 工具环境确认 | 检查本机 osv-scanner 与 dependency-check 命令 | 当前环境未安装,已列入后续工具化改进 |
| 敏感配置审阅 | 扫描配置文件与安全相关关键字 | 发现数据库连接配置仍需脱敏入库治理,报告正文已脱敏展示 |
| 编号 | 风险名称 | 位置 | 等级 | 影响 | 现状证据 | 已有控制 | 处置方案 | 优先级 |
|---|---|---|---|---|---|---|---|---|
| R-001 | 第三方依赖漏洞风险 | com.fasterxml.jackson.core:jackson-databind:2.18.8 | 高 | 特定反序列化忽略属性绕过场景下,可能影响对象字段保护策略 | OSV 查询命中 GHSA-5jmj-h7xm-6q6v;OSV 标注修复版本为 2.18.9,但当前 Maven Central 未查询到该版本,本地 Maven 解析也失败 | Jackson 已从旧版本升级到当前可打包版本;父 POM 已统一版本管理,避免父子 POM 版本漂移 | 持续跟踪可用修复版本;若 2.18.9 可解析则优先小版本升级;若不可用,则评估升级到后续可用安全版本并补跑兼容测试 | P0 |
| R-002 | 配置文件中存在真实数据库连接信息 | weberp/src/main/resources/application.properties 第 12 行附近 | 高 | 若配置文件被外发或提交到共享仓库,可能导致数据库访问凭证泄露 | 配置文件中仍有真实数据库连接串;本报告仅记录脱敏形态:jdbc:dm://*:/?凭证=* | 已约定生产真实配置应放在部署服务器本地;报告中不展示真实地址、账号或密码 | 立即轮换已暴露凭证;将仓库配置改为示例值;补充 .gitignore 排除本地与生产真实配置文件;对历史提交和制品进行泄露排查 | P0 |
| R-003 | 动态接口入口开放面较大 | SecurityConfig.java、BaseHandler.java、PublicApiRegistry.java | 中 | 若业务层校验缺失,可能导致未授权访问 | Spring Security 对动态 /Api/** 分发入口放行;业务层通过 @RequestCheck 和公开接口白名单进行控制 | BaseHandler 已引入 PublicApiRegistry,未列入白名单的 CheckLogin=false 方法会回落为需要登录;未匹配请求默认拒绝 | 持续审计所有 CheckLogin=false 方法;新增公开接口必须进入白名单并经过安全复核;对模块数据、文件预览、下载接口默认保持登录态要求 | P0 |
| R-004 | MyBatis 动态 SQL 拼接风险 | mapper/*.xml 中 ${...} 片段及 SQL Provider | 高 | 若外部输入直接进入 SQL 片段,可能造成 SQL 注入或越权查询 | Mapper 文件中仍存在字段名、条件片段和完整 SQL 拼接点 | 已新增 SqlSafetyGuard;部分入口已对字段名、只读查询和条件片段进行白名单或危险关键字拦截 | 对所有 ${...} 来源建立清单;字段名改为服务端白名单;条件片段逐步参数化;无法立即改造的入口必须先接入 SqlSafetyGuard | P0 |
| R-005 | 远程 URL 下载与服务端请求风险 | FileUtil.java、ToolsHandler.java、WebUtil.java、CreateWordUtil.java、DateTimeUtil.java | 高 | 若允许用户控制 URL,可能触发 SSRF、内网探测或下载超限 | RemoteDownloadGuard 已接入部分下载流程;仍存在多个 URL 请求入口需要继续统一治理 | RemoteDownloadGuard 限制协议、私有地址、链路本地地址、组播地址、重定向跳数和下载大小;配置项默认禁止私有地址 | 将残留 URL 请求入口统一接入远程下载守卫;重定向每跳复核;对在线预览类接口补充域名白名单或登录态要求 | P0 |
| R-006 | 文件路径穿越与压缩包解压风险 | FileUtil.java、ZipUtil.java | 中 | 文件读写或解压过程若未限制根目录,可能覆盖非授权路径 | 已有路径规范化、根目录匹配和压缩条目路径校验;回归测试覆盖路径越权和 Zip Slip | ZipUtil 对解压目标路径进行标准化并校验必须位于目标目录内;FileUtil 对文件虚拟路径和物理路径做规范化处理 | 持续保留回归测试;新增文件读写入口必须复用路径校验;压缩包处理增加大小和条目数量限制作为后续优化 | P1 |
| R-007 | GraalJS 脚本全访问风险 | JsEngine.java、application.properties | 中 | 若脚本全访问开启,表达式可能访问宿主环境能力 | app.js.allow-all-access=false 已配置;代码中仅在显式开启时允许全访问并输出告警 | 默认关闭 GraalJS 全访问;表达式执行使用独立上下文和缓存容量限制 | 保持默认关闭;若业务确需开启,必须形成变更审批、日志告警和最小权限说明;补充脚本危险语句测试 | P1 |
| R-008 | 系统命令执行点需持续复核 | OfficeUtil.java、FormatFactoryUtil.java | 中 | 若命令路径或参数可被外部输入污染,可能造成命令执行风险 | 代码中存在系统命令调用点,主要用于文件权限和格式转换 | 已将该类入口列为重点复核项;目前未在本报告中确认存在可利用外部输入链 | 对可执行文件路径、参数来源和工作目录进行白名单校验;禁止拼接 shell 字符串;记录命令执行审计日志 | P1 |
| R-009 | CORS 白名单与响应头暴露需环境化治理 | CorsConfig.java | 中 | 若跨域源配置过宽,可能扩大凭证跨域风险 | CORS 已采用白名单并允许携带凭证;测试覆盖不暴露全部响应头和拒绝异常方法 | 未使用通配源;限制请求方法;仅暴露必要响应头 | 将不同环境的允许源迁移到配置项;生产环境定期审计白名单;下线临时调试源 | P1 |
| R-010 | 安全扫描工具链不完整 | 本机工具环境 | 低 | 无法在本机直接运行标准化 OSV Scanner 或 OWASP Dependency-Check | 当前命令行未安装 osv-scanner 与 dependency-check | 已通过 OSV API 和 Maven 依赖树进行替代性核验 | 在 CI 或发布机补齐依赖漏洞扫描工具;形成扫描报告归档;对高危漏洞建立阻断规则 | P2 |
| R-011 | SQL 控制台日志与敏感信息日志风险 | application.properties、SQL 调试配置 | 中 | 开启 SQL 输出时,可能在日志中暴露业务字段、查询条件或敏感参数 | 配置中存在 MyBatis 控制台日志相关项,当前仍需按环境复核 | 部分日志级别已关闭;安全回归测试覆盖部分响应头与令牌场景 | 生产环境关闭 SQL 明文输出;日志脱敏账号、手机号、凭证和令牌;建立日志留存与访问控制 | P1 |
| 控制领域 | 已有措施 | 自证说明 |
|---|---|---|
| 依赖治理 | Maven 父 POM 统一管理关键组件版本;子模块保留真实业务依赖 | 降低父子 POM 版本漂移和重复依赖风险,便于后续集中升级 |
| 默认拒绝 | Spring Security 未匹配请求使用默认拒绝策略 | 减少非预期接口暴露 |
| 公开接口收敛 | PublicApiRegistry 集中维护公开方法 | 登录、验证码、基础系统信息等接口可公开;模块业务数据类接口默认需登录 |
| 登录态校验 | BaseHandler 基于 @RequestCheck 统一执行登录和参数校验 | 对动态分发 API 提供统一拦截层 |
| SQL 防护 | SqlSafetyGuard 提供字段名、只读查询和条件片段校验 | 对高风险动态 SQL 入口先建立拦截,再逐步参数化 |
| SSRF 防护 | RemoteDownloadGuard 限制协议、地址类型、重定向和下载大小 | 对远程下载流程建立边界控制 |
| 文件路径防护 | 文件路径规范化、根目录校验、压缩包条目路径校验 | 防止路径穿越和 Zip Slip |
| CORS 控制 | 采用具体源白名单,未使用任意源通配 | 携带凭证场景下减少跨域滥用风险 |
| JS 沙箱 | GraalJS 全访问默认关闭 | 降低表达式执行访问宿主能力的风险 |
| 回归测试 | SecurityRegressionTest 覆盖多项安全控制 | 形成可重复验证证据 |
| 优先级 | 处置事项 | 目标完成标准 |
|---|---|---|
| P0 | 轮换并移除已提交配置中的真实数据库凭证 | 仓库配置仅保留示例值;真实配置仅存在于部署服务器本地;历史暴露凭证完成轮换 |
| P0 | 跟踪 Jackson databind 修复版本 | 修复版本可解析后完成升级、打包和安全回归测试;若采用后续可用安全版本,完成兼容验证 |
| P0 | 动态 SQL 治理 | 所有 ${...} 来源登记;外部输入不得直接进入 SQL 片段;关键路径完成白名单或参数化 |
| P0 | 远程 URL 请求统一防护 | 所有用户可控 URL 请求入口接入 RemoteDownloadGuard 或域名白名单;重定向每跳校验 |
| P0 | 公开接口白名单治理 | CheckLogin=false 方法均有业务必要性说明;未列入公开白名单的接口必须要求登录 |
| P1 | CORS 与日志生产化治理 | CORS 源按环境配置;生产关闭 SQL 明文输出;日志中敏感字段完成脱敏 |
| P1 | 命令执行点复核 | 可执行文件路径与参数来源白名单化;禁止 shell 字符串拼接;补充审计日志 |
| P2 | 安全扫描工具链补齐 | CI 或发布流程中加入 OSV Scanner 或 OWASP Dependency-Check,并归档扫描结果 |
建议建立以下周期化机制,并将结果作为企业安全漏洞自查自证材料留档:
| 周期 | 自查动作 | 输出材料 |
|---|---|---|
| 每月 | 依赖漏洞扫描、Maven 依赖树归档、关键漏洞公告复核 | 依赖漏洞扫描记录、风险处置台账 |
| 每季度 | 代码安全自查,重点检查鉴权、SQL、文件、远程请求、脚本执行、日志脱敏 | 季度安全自查报告、整改跟踪表 |
| 每次发版前 | 执行安全回归测试、检查配置是否含真实凭证、复核新增公开接口 | 发版安全检查清单、测试结果截图或日志 |
| 重大漏洞公告后 | 针对影响组件进行应急排查、临时规避、升级验证 | 应急响应记录、修复验证记录 |
| 配置变更时 | 复核数据库、Redis、短信、推送、跨域源等配置 | 配置变更审批与脱敏检查记录 |
建议固定归档材料:
| 证据项 | 文件或命令 | 说明 |
|---|---|---|
| 安全回归测试 | mvn -q -Dtest=SecurityRegressionTest test | 已通过,覆盖路径、压缩包、CORS、远程下载、SQL 与公开接口控制 |
| 依赖树 | weberp/target/dependency-tree.txt | 已生成,用于记录当前第三方组件版本 |
| 依赖漏洞来源 | OSV GHSA-5jmj-h7xm-6q6v | Jackson databind 新披露风险来源 |
| 鉴权控制 | SecurityConfig.java、BaseHandler.java、PublicApiRegistry.java | 入口放行、业务层校验与公开接口白名单 |
| SQL 控制 | SqlSafetyGuard.java、mapper/*.xml | 动态 SQL 风险识别与部分防护落点 |
| 下载控制 | RemoteDownloadGuard.java、FileUtil.java | 远程下载协议、地址、重定向和大小控制 |
| 文件控制 | FileUtil.java、ZipUtil.java | 路径规范化、根目录校验和 Zip Slip 防护 |
| 脚本控制 | JsEngine.java、application.properties | GraalJS 全访问默认关闭 |
| 工具环境限制 | osv-scanner --version、dependency-check --version | 当前本机未安装,建议在 CI 或发布机补齐 |
本项目已开展面向依赖、配置、认证授权、SQL、文件处理、远程下载、脚本执行、跨域和回归测试的安全漏洞自查工作,并已具备多项风险规避措施。当前风险主要集中在配置凭证治理、Jackson 新披露漏洞跟踪、动态 SQL 全量收敛、残留远程 URL 请求统一防护和生产环境安全配置固化。
上述事项已纳入整改跟踪台账。后续通过定期扫描、发版前安全检查、重大漏洞应急复核和自动化安全回归测试,持续证明企业具备安全漏洞风险识别、处置和规避能力。