1.6 KiB
1.6 KiB
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 | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Hole 写/读操作缺少 Service 层产品权限护栏 | 2026-02-15 | hole-service | security_issue | critical |
|
权限策略停留在 Route 入参层,Service 未对 hole/panel -> product 归属做统一鉴权 | code_fix | active | high |
|
|
现象与影响
孔位写接口在“已登录”之后直接执行写库,读接口允许匿名访问精确结构参数。缺少产品级权限校验时,攻击者可通过可猜测 ID 读取或修改不属于自己的产品孔位数据。
修复动作
- 在
src/server/services/hole.service.ts新增requireUser/getProductForPermission/assertCanViewProduct/assertCanEditProduct。 - 将权限护栏接入
listByFilter/findById/findByPanelId(查看)与create/createMany/update/delete/deleteMany/deleteByPanelId/deleteByFilter(写入)。 - 所有写入前都先解析
hole/panel -> product归属,再执行canEditProduct。
验证
npm run type-check -- --pretty false通过npm test -- tests/lib/cad-panel-linking.test.ts --runInBand通过
预防策略
- 所有“资源隶属产品”的接口统一执行“Route 鉴权入口 + Service 产品权限护栏”。
- Service 层禁止依赖 Route 先验假设(例如“已经做过权限校验”)。