Skip to content

Commit 491f847

Browse files
authored
fix(security): harden CSRF with Content-Type gate and OpenAPI sync (#2819)
Defense-in-depth over GET→POST alone: reject the three CORS-safelisted simple-form Content-Types (x-www-form-urlencoded, multipart/form-data, text/plain) on 5 no-body POST handlers (snapshot/save, manager/queue/{reset,start,update_comfyui}, manager/reboot) to block <form method=POST> CSRF that bypasses method-only gating. Convert 10 pure state-changing endpoints (fetch_updates, queue/{update_all,reset,start, update_comfyui}, snapshot/{remove,restore,save}, comfyui_switch_version, reboot) from GET to POST and split 5 config endpoints (db_mode/preview_method/channel_url_list/policy/{component,update}) into GET(read) + POST(write, JSON body). Emit the in_progress + done event pair from the /manager/queue/install sync-enable fast-path so client UI finalizes (previously only queue/start's empty worker done fired, leaving item.restart unset and the Enable button visible after a successful enable). Harden js/custom-nodes-manager.js completion path: await onQueueCompleted with try/catch (surfaces silent turbogrid stale-item throws), replace the {}.length == 0 no-op empty guard, set install_context before queue/install to avoid a sync-completion race, wrap classList/updateCell in try/catch. Resynchronize openapi.yaml with the converted routes (method → post, query params → requestBody JSON schema, sibling post on 5 split endpoints). Update 31 JS fetchApi call sites across 7 files; add tests/test_csrf_content_type_helper.py covering 5 Content-Type cases via aiohttp TestClient. Reported-by: XlabAI Team of Tencent Xuanwu Lab CVSS: 8.1 (AV:N/AC:L/PR:N/UI:R/S:U/C:N/I:H/A:H)
1 parent d57c142 commit 491f847

11 files changed

Lines changed: 567 additions & 144 deletions

glob/manager_core.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
from node_package import InstalledNodePackage
4545

4646

47-
version_code = [3, 39, 2]
47+
version_code = [3, 40]
4848
version_str = f"V{version_code[0]}.{version_code[1]}" + (f'.{version_code[2]}' if len(version_code) > 2 else '')
4949

5050

0 commit comments

Comments
 (0)