mirror of
https://gh-proxy.org/https://github.com/klinsmaya/SQLBot.git
synced 2026-11-10 10:16:55 +08:00
docs(agents): 完善自动化开发流程与验证证据规范
This commit is contained in:
@@ -15,6 +15,9 @@
|
||||
- `keyExpression` 能取到真实资源 ID;
|
||||
- 列表语义不会被单个资源绕过;
|
||||
- 管理员、工作空间管理员和普通用户路径都明确。
|
||||
- 权限表达式引用的参数缺失、解析失败或归属不匹配时必须拒绝,不能回退为直接执行处理函数。
|
||||
- 子资源归属从服务端记录推导并校验完整关系(如字段 → 表 → 数据源 → 工作空间);请求中的 `ds_id`、`oid` 仅为待校验输入。不能仅验证调用者有权访问所提供的数据源,再按任意表/字段 ID 执行操作。
|
||||
- 批量接口明确整批拒绝还是仅操作有权记录,并测试混合归属输入;单项、批量、同步、导出等入口应遵循相同授权边界。
|
||||
- 手写查询归属时,同时校验:
|
||||
- 资源存在;
|
||||
- 资源属于当前工作空间;
|
||||
@@ -25,7 +28,7 @@
|
||||
|
||||
## SQL 生成与执行
|
||||
|
||||
当前主流程的安全顺序不可弱化:
|
||||
修改主流程时应满足以下安全顺序;需在实际入口和调用链验证,不能把本清单当作现状已安全的证明:
|
||||
|
||||
1. 只把允许的表和字段元数据提供给模型;
|
||||
2. 解析模型返回 JSON 并提取 SQL;
|
||||
@@ -45,7 +48,7 @@
|
||||
|
||||
## 认证、Host 与嵌入
|
||||
|
||||
- 不要改变 `backend/main.py` 中中间件注册顺序;`HostValidationMiddleware` 必须在外层拒绝非法 Host。
|
||||
- 修改 `backend/main.py` 的中间件顺序时,验证实际请求执行顺序(不能只看注册顺序);`HostValidationMiddleware` 必须在认证/业务使用 Host 前拒绝非法值,并回归预检与正常请求。
|
||||
- Host 只允许合法域名 / IPv4 / IPv6 形态,不能包含 `/`、`@` 或空白。
|
||||
- 认证和助手 token 头由后端中间件与前端 request interceptor 处理;不要新增手工传递或复制 token 的路径。
|
||||
- 页面嵌入协议必须保持:
|
||||
@@ -60,8 +63,8 @@
|
||||
|
||||
- 不信任上传文件名、扩展名、MIME、sheet 名或用户提供的 `filePath`。
|
||||
- 上传必须限制类型和大小,落盘使用服务端生成的文件名或 opaque ID。
|
||||
- 读取用户可控路径前必须证明路径仍位于允许目录内;优先使用 `os.path.commonpath` 或仅通过内部 ID 映射真实路径。
|
||||
- 下载响应使用 `os.path.basename` 或 FileResponse,不回显绝对路径。
|
||||
- 读取用户可控路径前,解析真实路径后用 `os.path.commonpath` 等验证其仍位于允许目录内,或通过已授权的内部 ID 映射路径;不使用字符串前缀判断。校验到打开之间不得允许不可信方替换路径或符号链接。
|
||||
- 下载前先校验权限和服务端文件实际路径的目录归属,包括符号链接解析;`os.path.basename` 只适合清理下载展示名,`FileResponse` 只负责传输,两者都不能替代路径授权。响应不回显内部绝对路径。
|
||||
- Excel/CSV 解析错误不能变成可猜测的内部路径信息。
|
||||
|
||||
## 前端渲染
|
||||
@@ -80,7 +83,7 @@
|
||||
|
||||
## 必测场景
|
||||
|
||||
修改相关逻辑时至少覆盖:
|
||||
按本次涉及的入口选择相关场景;不要求每次安全改动执行下列全部类别,但必须说明未覆盖的相关风险:
|
||||
|
||||
- 未登录、无权限、资源不存在、跨工作空间访问;
|
||||
- 管理员、工作空间管理员、普通用户、助手用户;
|
||||
|
||||
Reference in New Issue
Block a user