本卡屬 FR-114 資安修正(母卡 CM-2019),第 5 批子集 B 卡 5B-4,修 SUMMARY #85/#86/#126/#127(出自 M05-1/M05-2/M05-3/M05-4)。中。修法規格來自內化卡 CM-1990,計畫在 docs/features/FR-114-2609-security-fix-dispatch/batches/plan-b5B.md「卡 5-B4」段。
#85:多人同時填問卷的即時同步那條路(不是 HTTP),把畫面送上來的名字直接寫進建立者/修改者欄位。所有 HTTP 端點都用登入憑證裡的身分,只有即時同步這一條路不是——這不是越權,但一個合法填答者可以把自己的修改署成別人的名字,事後追查「誰改了這一題」就不可靠。
#86:問卷資料夾的「修改」入口,整包請求內容原樣展開成資料物件——多塞一個「已刪除」欄位就繞過「資料夾裡還有東西就不准刪」這道守門,造出「資料夾已經刪掉、但問卷還掛在底下」的孤兒資料。
#126:問卷資料夾列表,同樣把整包請求內容展開成查詢參數——把程式內部「排除系統資料夾」的開關蓋掉,就看得到流程自動產生的內部快照資料夾(__ 開頭)以及已經刪掉的資料夾,只要登入、連權限點都沒掛。
#127:同一支資料夾列表,網址入口包了一層「不管出什麼錯都接住」,然後把錯誤訊息當成回應內容送出去——送一個型別不對的查詢條件就會把資料表名稱、欄位名稱與查詢片段吐給前端,等於把內部結構攤開。
首腦核對:
/Users/chouraymond/Projects/Jedicogy/module/jedi-python-package/.claude/worktrees/jedi-wt-fix-security/<套件目錄>(branch fix/security-b1)改,只動自己那支套件的子目錄、只 git add 該子目錄下的檔。 本卡對應 jedi-survey,worktree 建議 wt-fix-b5-survey-folder。jedi-survey/jedi_survey/app/handler/fill_survey_socketio_handler.py:165 建立者/修改者欄位直接採用畫面送上來的名字,#85
jedi-survey/jedi_survey/app/service/survey_folder.py:81 整包請求內容原樣展開成資料物件,#86 核心
jedi-survey/jedi_survey/api/routes/survey_folder_route.py:92 源頭 @use_kwargs(..., apply=False),#86
jedi-survey/jedi_survey/api/routes/survey_folder_route.py:46 資料夾列表查詢參數展開,#126
jedi-survey/jedi_survey/api/routes/survey_folder_route.py:51 「不管出什麼錯都接住」把錯誤訊息原樣回傳,#127
get_user_context().login_name——即時同步的基底類別每個事件都會注入登入身分,先查再寫、用既有的),不要相信畫面送上來的值。一行修。apply=False,改用只宣告「名稱」「說明」兩個欄位的嚴格格式來解析,再具名帶進去;「已刪除」「編號」「識別碼」「上層資料夾」這些欄位一律不准從請求設定。