furniture-3d-system-Wu/furniture-3d-system/docs/solutions/security-issues/product-hardware-permission-guard-20260215.md
WuYongJie 5821d73291 初始提交:3D家具安装展示系统
包含:
- furniture-3d-system:Next.js 16 全栈应用(资产中心、产品管理、3D装配动画)
- autocad-plugin:AutoCAD 家具导出插件源码
- 资产中心改造:编辑弹窗化、删除功能、Toast反馈、自定义Select组件

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-02 14:00:19 +08:00

1.5 KiB
Raw Blame History

title, date, module, problem_type, severity, symptoms, root_cause, resolution_type, status, confidence, tags, related_patterns
title date module problem_type severity symptoms root_cause resolution_type status confidence tags related_patterns
Product Hardware 接口缺少产品级权限护栏 2026-02-15 product-hardware security_issue critical
/api/product-hardware/[id] GET 允许匿名读取
PATCH/DELETE 只校验登录,未校验当前用户是否有目标产品权限
接口按资源 ID 直接读写,缺少 productId 归属权限校验 code_fix active high
security
idor
permission
product-hardware
WF-PRODHW-ROUTE-SERVICE-001

现象与影响

攻击者只要拿到 productHardware.id,就可能越权读取产品结构细节或修改/删除不属于自己的五金件关联记录。

修复动作

  1. 新增 src/server/services/product-hardware.service.ts,在 findById/update/delete 统一执行:
    • 解析 productHardware.productId
    • 基于产品快照执行 canViewProduct/canEditProduct
  2. 新增 src/server/repositories/product-hardware.repository.ts,由 Repository 承担查询与更新细节。
  3. src/app/api/product-hardware/[id]/route.ts 全面改为通过 Service 调用,GET 不再匿名开放。

验证

  • npm run type-check -- --pretty false 通过
  • npm test -- tests/lib/cad-panel-linking.test.ts --runInBand 通过

预防策略

  • 所有“按资源 ID 直接读写”的接口,必须在 Service 层做“资源 -> productId -> 权限”链路校验。
  • Route 层不得直接承担权限规则分支与数据库读写。