framework-security-gap-hardeningreview-ready源码审计确认框架存在内部调用标记可伪造、WebSocket 未鉴权、租户上下文缺失时 SQL 隔离失败开放、本地文件路径未约束、防重放 nonce 非原子、登录密码加密失败降级明文等问题。另有数据权限错误放行、固定 Job Token pepper、消息部分成功状态不准确及若干低优先级技术债。
本变更按风险优先级分阶段加固,先关闭可直接跨越安全边界的入口,再处理兼容性和可观测性问题。
X-Inner-Call 只有来自显式可信源地址的请求才可跳过应用层加解密与防重放。CONNECT 必须校验 Sa-Token,服务端会话绑定真实用户,客户端不得向 broker topic/queue 直接发送消息。@IgnoreTenant 场景保持可用。set-if-absent 登记,TTL 至少为时间窗口两倍。本变更不修改:
forge-server/forge-framework/forge-plugin-parent/forge-plugin-capability-*forge-admin-ui/src/views/ai/capability/client.vueTenantInterceptor.javaLogProperties.java、OperationLogAspect.java本变更不使用 git switch、不自动提交,避免改变并行 Agent 所在工作区的 HEAD。最终通过 git diff --name-only 证明未触碰上述边界。
在 Crypto Starter 新增独立配置 forge.crypto.internal-call.trusted-addresses,默认只信任 IPv4/IPv6 loopback。校验仅使用 Servlet 容器提供的 remoteAddr,不信任可由客户端伪造的转发头。支持显式 IP 和 CIDR;生产容器或网关地址必须通过部署配置加入白名单。
三处加解密/防重放跳过逻辑统一调用同一个验证器。只有 Header 值为 true 且来源匹配白名单时才视为内部调用;伪造 Header 按普通外部请求处理并记录安全告警。
WebSocket Starter 定义认证 SPI 和 STOMP 入站拦截器;Auth Starter 提供 Sa-Token 实现,避免 websocket/auth Maven 循环依赖。CONNECT 从 STOMP Header 读取 Bearer Token,认证成功后把 loginId 写入 Principal。
SUBSCRIBE/SEND 必须有已认证 Principal;客户端 SEND 只允许 /app/**,禁止直发 /topic/**、/queue/**、/user/**。认证类通知改为服务端 convertAndSendToUser,前端订阅 /user/queue/messages,不再广播后由浏览器按 userId 过滤。
允许 Origin 默认限制为 localhost 开发地址;生产通过 forge.websocket.allowed-origin-patterns 显式配置。
复用已有 forge.tenant.strict-mode,默认改为 true。处理顺序为:显式上下文忽略、已知非租户表、自动检测非租户表、租户上下文校验。只有确实需要租户列的表在 tenantId 缺失时抛异常;后台全局任务必须使用现有 TenantContextHolder.executeIgnore 或 @IgnoreTenant。
初始化时将基础目录转为绝对规范路径。所有相对路径通过统一 resolver 解析,拒绝绝对路径、.. 逃逸、非法 businessType/bucketName 和路径中的符号链接。元数据中的历史路径同样重新校验,避免数据库污染后扩大为任意文件读删。
ReplayTokenCache 提供原子 markIfAbsent,底层使用 Redisson bucket setIfAbsent;Filter 只在登记成功后放行。TTL 使用 replayTimeWindow * 2 并检查溢出和非法窗口。
WARN 和 DENY,默认 WARN 保留兼容,生产可切换 DENY。3=部分成功,字典迁移同步增加状态。glob/sass,并将旧 Glob 默认导入迁移到仓库已使用的 Glob 11 API,保证登录安全改动可在干净环境构建。executeIgnore,不允许恢复默认 fail-open。DENY 前需先完成配置盘点。X-Inner-Call: true 不再触发任何跳过路径,loopback/显式可信 CIDR 可通过。../、绝对路径、符号链接和恶意 bucket/businessType 均无法越出基础目录。本变更涉及认证、权限和租户隔离。用户于 2026-08-02 明确要求“按照优先级自动修复这些问题”,并要求不影响正在并行修改的统一能力开放平台代码,视为本 Spec 的实施授权。真实生产网段、Origin、pepper 和部署回归仍是上线门禁。
已完成内部调用来源校验、WebSocket 鉴权、租户上下文失败关闭、文件路径约束、nonce 原子登记、密码失败关闭、DataScope 可选严格策略、Job Open API fail-closed、密钥生成、幂等键、消息部分成功状态、WorkerId 容量门禁和未实现能力安全收口。
以下事项未做破坏性自动改造:
TenantInterceptor 属并行 Agent 冻结文件;其中无 auth 的 Header 回退在当前必选 Core 依赖图下不可达,超管跨租户语义仍需“目标租户 + 审计”产品规则后单独实施。WARN 保持兼容,生产完成配置盘点后应设置 forge.datascope.unconfigured-policy=DENY。del_flag 全库 AST/CI 审计需单独变更,不能无差别改写历史 SQL。ExternalProxyServiceImpl.trustedInternal 仍依赖受控配置;入站服务已增加直接对端白名单,但网关仍必须剥离外部 X-Inner-Call Header。