本卡屬 FR-114 資安修正(母卡 CM-2019),第 2 批「只驗登入、不檢查歸屬」卡 2-8,修 SUMMARY #46/#65(出自 掃描總表120/67+M10-11/掃描總表 121)。高。修法規格來自內化卡,計畫在 docs/features/FR-114-2609-security-fix-dispatch/batches/plan-b2.md「卡 2-8」段。🔴 本卡要等第 1 批合回主線+套件發版後才能開工。

問題是什麼(白話)

#46:合規資源庫的控制項清單範本是跨客戶共用的資料,決策者已補裁修法——後端在改控制項清單前,要先確認這份範本是不是自己客戶的,而且這個檢查現在只在「改分享身分」那個分支才做,本卡要把它搬到「只要有寫入就檢查」。同一份範本資料其實有三條寫入路徑:直接編輯、Excel 匯入覆蓋、Word 匯入覆蓋——只修一條會留下另外兩條後門,三條必須一起修。

#65:新增資源庫項目的端點沒有能力檢查,也沒有流量限制(rate limit),可以被短時間內大量濫用塞入垃圾資料。

首腦核對:

工作區

BE 側:在 /Users/chouraymond/Projects/Billows/Audit-Manager/compliance-manager-be/.claude/worktrees/wt-fix-security(branch fix/security-b1)改(app/oscal/service/、api/oscal/routes/、app/module_frame/service/),不要碰主 checkout,跑服務用 PORT=8001。本卡與卡 2-9 共用同一個工作區(2-9 接續本卡繼續開發,不要在本卡結束時清掉工作區)。

在哪裡

app/oscal/service/resource_library_app_service.py:220   _init_ao_workflows,補歸屬檢查
app/oscal/service/resource_library_app_service.py:419   呼叫 _init_ao_workflows 的地方
app/oscal/service/resource_library_app_service.py:427   create_resource_library,合併點,加流量限制(每租戶每小時 10 次)
common/authz/sharing.py   assert_scope_writable,既有正確寫法,直接複製
api/oscal/routes/ssp_excel_import_route.py:103   Excel 匯入覆蓋入口
app/oscal/service/ssp_excel_import_app_service.py:441   _confirm_update_module_frame,補歸屬檢查(掃描總表#123)
app/oscal/service/ssp_docx_import_app_service.py:304   confirm_import,補歸屬檢查(掃描總表#125)
api/oscal/routes/ssp_docx_import_route.py:96   Word 匯入覆蓋入口
api/module_frame/routes/module_frame_route.py:58   ModuleFrameRoute.post,既有 @require_capability("module-frame.create") 寫法,#65 直接複製這個模式
(#65 新增能力檢查與流量限制的實際端點:resource_library_route.py 的新增端點,需搭配上面 create_resource_library 合併點)

怎麼修