安全问题 / Bug 描述
问题概述
在「工作区文件」管理页面,没有管理权限的普通用户可以成功操作「删除」文件。这是一个权限控制缺陷,可能导致:
- 恶意用户故意删除重要文件
- 误操作导致数据丢失
- 无法追溯是谁删除了文件
环境信息
- 部署方式: 自部署(Docker)
- 复现步骤:
- 使用一个没有管理权限的普通用户账号登录
- 进入工作区文件管理页面
- 找到任意文件,点击「删除」按钮
- 观察是否可以操作成功
预期行为
- ❌ 普通用户不应该看到「删除」按钮
- ❌ 或者「删除」按钮应该被禁用(disabled)
- ❌ 或者点击后返回 403 权限错误
实际行为
- ✅ 普通用户可以点击「删除」按钮
- ✅ 操作成功,文件被删除
- ⚠️ 管理员可能不知道谁删除了文件
影响范围
| 角色 |
当前行为 |
期望行为 |
| 管理员 |
可以删除 |
✅ 正常 |
| 普通用户 |
可以删除 |
❌ 应该禁止 |
| 租户间隔离 |
需验证 |
需验证 |
安全影响评估
- 严重程度: 中-高
- 利用难度: 低(任何登录用户都能操作)
- 业务影响: 高(可能导致重要文件丢失)
- 数据泄露: 无直接泄露,但可能影响业务连续性
优先级建议
- 优先级: High(安全相关)
- 建议修复版本: 下一版本
建议的修复方案
方案 1:前端权限控制(快速修复)
{user.isAdmin && (
<Button onClick={handleDelete} danger>
删除
</Button>
)}
方案 2:后端权限校验(必须)
@app.delete("/api/files/{file_id}")
async def delete_file(file_id: str, current_user: User):
if not current_user.is_admin:
raise HTTPException(status_code=403, detail="Admin required")
# ... 继续处理
方案 3:添加审计日志
记录谁在什么时间删除了哪个文件:
audit_log.info(
f"File deleted: {file_id} by {current_user.id} at {datetime.now()}"
)
注意: 此问题由用户在 2026-04-16 测试发现。
安全问题 / Bug 描述
问题概述
在「工作区文件」管理页面,没有管理权限的普通用户可以成功操作「删除」文件。这是一个权限控制缺陷,可能导致:
环境信息
预期行为
实际行为
影响范围
安全影响评估
优先级建议
建议的修复方案
方案 1:前端权限控制(快速修复)
方案 2:后端权限校验(必须)
方案 3:添加审计日志
记录谁在什么时间删除了哪个文件:
注意: 此问题由用户在 2026-04-16 测试发现。