文件
hyb-oa/.trellis/tasks/07-16-system-multidimensional-audit/research/business-security-review.md
T

8.5 KiB
原始文件 Blame 文件历史

业务、权限、数据与安全防御性审查摘要

本文件是可共享的防御性摘要。唯一分级与当前生命周期状态以 research/findings.md 为准;原始发现基线仍为 bbb5c89,当前增量复核 见 research/current-head-delta.md。

摘要边界

  • 只保留 finding ID、风险类别、发现时严重度、置信度、代码位置、业务影响、控制目标和无害验证结论。
  • 不保留攻击步骤、可执行载荷、绕过方式、概率推演、可组合接口细节、真实环境信息或原始业务资料。
  • 本地测试与归档修复任务承载必要工程证明;本摘要不复制敏感实现细节。
  • 未访问公网、生产数据库、真实员工资料、真实附件、企业微信或付款能力。
  • “本地修复通过”不等于“已部署”或“外部行为通过”。

防御性 finding 摘要

原 ID 风险类别 发现时严重度 置信度 发现状态 代码与证据位置 业务影响 控制目标 无害验证结论
BSR-SEC-001 认证 / 代理信任 P0 高 CONFIRMED server/src/app.js、server/src/config.js、server/src/routes/auth.js、server/tests/unit/routes/auth.login.test.js、归档任务 07-17-auth-challenge-trusted-proxy-hardening 认证挑战边界不足可能导致账号被未授权控制。 挑战记录单次有效、受限速与并发约束;代理来源必须显式可信。 当前 HEAD 的聚焦负路径、完整服务端回归和隔离并发验证均通过;仅证明本地修复,部署与公网代理行为待授权验证。
BSR-SEC-002 业务附件 / 浏览器隔离 P0 高 CONFIRMED server/src/routes/purchaseRequests.js、server/src/services/purchaseAttachmentPolicy.js、client/src/api/purchaseRequests.ts、server/tests/unit/routes/purchase.attachments.test.js、归档任务 07-17-purchase-attachment-xss-hardening 主动内容若在 OA 同源上下文呈现,可能破坏用户会话和业务数据边界。 上传按实际内容验证;下载重新授权、审计并强制非执行呈现。 当前 HEAD 的策略、路由、完整服务端和聚焦浏览器测试均通过;仅证明本地修复,部署、边缘响应和历史资料检查待授权。
BSR-AUTHZ-001 员工敏感数据授权 P1 高 CONFIRMED server/src/constants/permissions.js、server/src/routes/employees.js、server/prisma/schema.prisma 广泛报表能力可能越过岗位所需范围读取员工敏感字段。 字段级授权与人员数据范围同时生效,默认最小披露,拒绝路径可审计。 只读跨层检查确认当前权限粒度不足;未请求或展示任何真实员工资料。
BSR-DATA-001 付款状态一致性 P1 高 LIKELY server/src/routes/paymentBatches.js、server/prisma/schema.prisma 并发状态变化可能形成重复成功或证据覆盖,影响资金状态可信度。 使用数据库条件更新/锁、幂等键和不可覆盖的审计证据保证单一结果。 静态事务边界检查发现并发保护证据不足;本轮未连接数据库或执行付款。
BSR-PRIV-001 员工合同附件 P1 高 CONFIRMED server/src/routes/employees.js、server/prisma/schema.prisma、server/tests/unit/routes/employees.attachments.test.js 普通人员管理能力可能覆盖高敏合同资料,且用途与下载审计不足。 高敏附件使用独立最小权限、对象级授权、用途记录、下载审计和安全 DTO。 只读路由/测试合同检查确认专用控制缺口;未读取真实合同或附件。
BSR-SEC-003 统一导出 P1 高 CONFIRMED server/src/routes/exports.js 及各业务导出调用方 导出内容在表格软件中打开时可能被解释为活动内容,影响使用者终端边界。 所有 CSV/表格导出统一经过安全编码器,并以合成样例覆盖危险前缀和正常中文内容。 静态检查确认通用编码层缺少该类中和合同;未生成或打开真实业务导出。
BSR-PRIV-002 客户端数据生命周期 P1 高 CONFIRMED client/src/auth/AuthContext.tsx、client/src/mobile/workflowActionQueue.ts、client/src/pwa.ts、client/src/api/workflow.ts 退出或切换账号后残留的身份、审批详情和草稿可能被后续设备使用者读取。 先决定离线业务必要性;按账号隔离、最小缓存,并在退出/切换时可验证清除。 静态生命周期检查确认持久化与清理合同不闭合;未检查真实设备存储。
BSR-SEC-004 下载凭证 / 日志面 P2 中高 LIKELY server/src/routes/invoicePool/read.js、client/src/api/invoicePool.ts、相关边缘日志合同 URL 中的短期访问凭据可能进入浏览器或代理的常规记录面。 优先使用当前认证上下文的 API 下载、最小化 URL 敏感信息并约束日志与缓存。 采购附件分支已由独立修复任务关闭;当前其他业务下载链与默认日志面仍存在风险可能性。未访问真实边缘日志,因此保持 LIKELY。
BSR-AUTHZ-002 受限资料规则 P2 中高 LIKELY server/src/routes/confidentialDocRefs.js、server/src/routes/projects.js、server/prisma/schema.prisma 已保存但未执行的访问规则可能让用户误以为资料位置受到限制。 产品先确认字段是正式 ACL 还是废弃元数据;若保留,必须由后端强制执行并有拒绝测试。 静态检查只确认规则与执行证据不一致;未访问任何真实资料位置。
BSR-DATA-002 付款取消审计 P2 高 CONFIRMED server/src/routes/paymentBatches.js、server/prisma/schema.prisma 取消缺少结构化原因、并发保护和独立审计时,难以还原资金流程责任。 取消必须记录操作者、原因、前后状态和并发条件,且不能覆盖既有证据。 静态路由与模型检查确认合同缺口;未执行真实状态变化。
BSR-SEC-005 浏览器防御纵深 P2 高 CONFIRMED server/src/app.js、server/src/config.js、部署响应头合同 缺少内容执行限制会降低浏览器端对未知缺陷的纵深保护。 基于实际资源清单分阶段收紧 CSP,先报告后阻断,并保持附件下载独立沙箱。 本地配置检查确认当前未启用全站策略;不据此推断单独的可利用路径。
BSR-UX-001 页面能力显隐 P2(收敛校准) 高 DUPLICATE research/page-static-review.md、活动任务 05-31-unified-page-header-actions 后端正确拒绝但页面仍展示写操作会误导用户并造成表单后失败。 前端能力显隐与后端拒绝测试采用同一权限合同;后端始终保持权威。 只读跨层复核确认重复 finding;统一降为 P2,不作为新的下游 task。

当前状态说明

  • BSR-SEC-001、BSR-SEC-002 保留发现时 P0 和 CONFIRMED;当前修复状态统一为 LOCAL_FIX_VERIFIED,部署状态为 DEPLOYMENT_PENDING,外部验证为 EXTERNAL_BEHAVIOR_PENDING。
  • 其他 finding 没有在本审查任务中实施业务修复;其当前状态和去重关系只在唯一台账维护。
  • 付款、权限、附件和客户端生命周期涉及状态机、数据范围或隐私边界,后续实施完成后必须进行独立只读复核。

后续工作包映射

Gate 0:BSR-SEC-001、BSR-SEC-002 的部署和外部行为复核须另行授权;获准后优先于下面六个本地开放问题工作包,且不会因本任务归档而视为完成。

  1. 员工敏感数据范围授权:BSR-AUTHZ-001。
  2. 付款状态一致性与审计:BSR-DATA-001、BSR-DATA-002。
  3. 员工合同附件权限与访问审计:BSR-PRIV-001。
  4. 发布门禁可信化:由工程 finding 承接,不在本文件扩写。
  5. 客户端数据生命周期与统一导出:BSR-PRIV-002、BSR-SEC-003,并评估 BSR-SEC-004。
  6. 核心页面可靠性、权限显隐及旧标题任务收口:本文件映射 BSR-UX-001,页面 P1/P2 内部顺序见唯一台账。

部署、公网角色、真实边缘日志、企业微信真机、历史真实资料治理和新 Day 1 试运行均保持另行授权;本任务不创建对应下游 task。