安全问题 / Bug 描述
问题概述
在触发器管理页面,没有管理权限的普通用户可以成功操作「禁用」触发器。这是一个权限控制缺陷,可能导致:
- 恶意用户故意禁用关键业务触发器
- 误操作导致业务流程中断
- 无法追溯是谁禁用了触发器
环境信息
- 部署方式: 自部署(Docker)
- 复现步骤:
- 使用一个没有管理权限的普通用户账号登录
- 进入触发器管理页面(
/triggers 或相关路由)
- 找到任意触发器,点击「禁用」按钮
- 观察是否可以操作成功
预期行为
- ❌ 普通用户不应该看到「禁用」按钮
- ❌ 或者「禁用」按钮应该被禁用(disabled)
- ❌ 或者点击后返回 403 权限错误
实际行为
- ✅ 普通用户可以点击「禁用」按钮
- ✅ 操作成功,触发器被禁用
- ⚠️ 管理员可能不知道谁禁用了触发器
影响范围
| 角色 |
当前行为 |
期望行为 |
| 管理员 |
可以禁用 |
✅ 正常 |
| 普通用户 |
可以禁用 |
❌ 应该禁止 |
| 租户间隔离 |
需验证 |
需验证 |
技术分析(初步)
问题可能出在以下几个方面:
1. 前端层面
// 可能的问题代码
<Button onClick={handleDisable} disabled={false}>
禁用
</Button>
// 缺少权限判断:disabled={user.isAdmin}
2. 后端层面
# 可能的问题代码
@app.post("/api/triggers/{id}/disable")
async def disable_trigger(trigger_id: str):
trigger = get_trigger(trigger_id)
# 缺少:if not current_user.is_admin: raise 403
disable_trigger_in_db(trigger_id)
return {"success": True}
3. 路由/权限中间件
可能路由配置没有添加管理员权限检查:
# 可能缺失的配置
- path: /api/triggers/{id}/disable
methods: [POST]
middleware: [auth] # 只有 auth,缺少 admin_required
建议的修复方案
方案 1:前端权限控制(快速修复)
{user.isAdmin && (
<Button onClick={handleDisable}>
禁用
</Button>
)}
方案 2:后端权限校验(必须)
@app.post("/api/triggers/{id}/disable")
async def disable_trigger(trigger_id: str, current_user: User):
if not current_user.is_admin:
raise HTTPException(status_code=403, detail="Admin required")
# ... 继续处理
方案 3:添加审计日志
记录谁在什么时间禁用了哪个触发器:
audit_log.info(
f"Trigger disabled: {trigger_id} by {current_user.id} at {datetime.now()}"
)
安全影响评估
- 严重程度: 中-高
- 利用难度: 低(任何登录用户都能操作)
- 业务影响: 高(可能中断关键业务流程)
- 数据泄露: 无直接泄露,但可能影响业务连续性
优先级建议
- 优先级: High(安全相关)
- 建议修复版本: 下一版本
相关配置/代码路径
请研发团队检查以下文件:
frontend/src/pages/triggers/ - 触发器前端页面
backend/app/api/triggers.py - 触发器后端 API
backend/app/middleware/auth.py - 权限中间件
注意: 此问题由用户在 2026-04-16 测试发现,用户刚测试的操作结果待确认能否恢复。
安全问题 / Bug 描述
问题概述
在触发器管理页面,没有管理权限的普通用户可以成功操作「禁用」触发器。这是一个权限控制缺陷,可能导致:
环境信息
/triggers或相关路由)预期行为
实际行为
影响范围
技术分析(初步)
问题可能出在以下几个方面:
1. 前端层面
2. 后端层面
3. 路由/权限中间件
可能路由配置没有添加管理员权限检查:
建议的修复方案
方案 1:前端权限控制(快速修复)
方案 2:后端权限校验(必须)
方案 3:添加审计日志
记录谁在什么时间禁用了哪个触发器:
安全影响评估
优先级建议
相关配置/代码路径
请研发团队检查以下文件:
frontend/src/pages/triggers/- 触发器前端页面backend/app/api/triggers.py- 触发器后端 APIbackend/app/middleware/auth.py- 权限中间件注意: 此问题由用户在 2026-04-16 测试发现,用户刚测试的操作结果待确认能否恢复。