fix(security): load_path不再注册CRUD生成的add/update/delete_*.dspy——它们是裸sor.C/U/D绕过发券引擎原子占额/审计流水只读/org隔离/状态守卫全部校验;只注册index.ui+get_*只读,写操作仅走wwwroot/api/有校验端点(UI editable URL已指向)。HTTP实测抓到:update/delete_voucher_usage_log.dspy登录态200可篡改审计流水。RBAC默认拒绝→未注册即401

This commit is contained in:
yumoqing 2026-09-13 11:37:47 +08:00
parent 9af312ccea
commit 0fbd0cab07

View File

@ -62,15 +62,18 @@ PATHS_LOGINED = [
f"/{MOD}/api/instance/voucher_invalidate.dspy",
]
# CRUD 目录(框架生成,路径必须逐个注册)
# CRUD 生成目录(框架生成):只注册 index.ui + get_*.dspy只读
# ⚠ 生成的 add/update/delete_*.dspy 一律【不注册权限】——它们是裸 sor.C/U/D
# 绕过全部业务校验(发券引擎原子占额/流水审计只读/org 隔离/状态守卫)。
# 写操作只走 wwwroot/api/ 下有校验的端点UI 的 editable URL 已指向它们)。
# 文件虽被 xls2ui 生成noedit 也生成),无权限行即 401RBAC 默认拒绝)。
# 2026-09-12 实测抓到的漏洞:统一注册四件套后 update/delete_voucher_usage_log.dspy
# 登录态直接 200 可篡改审计流水——精确权限是防线,生成端点是攻击面。
for alias, tbl in CRUD_DIRS.items():
PATHS_LOGINED += [
f"/{MOD}/{alias}",
f"/{MOD}/{alias}/index.ui",
f"/{MOD}/{alias}/get_{tbl}.dspy",
f"/{MOD}/{alias}/add_{tbl}.dspy",
f"/{MOD}/{alias}/update_{tbl}.dspy",
f"/{MOD}/{alias}/delete_{tbl}.dspy",
]