SuperAPI AI 工具集

path-safety

安全与审计

查看项目

更新于 10-16 00:31

技能介绍

用途:这是服务端路径安全编码规范,提炼了 6 条必须遵守的规则,违反任一条可能引入路径穿越(LFI)漏洞。适用于编写文件下载路由、Agent 工具(文件读取/目录列出)、数据连接器/Loader、Workspace 路径操作与沙箱配置。

主要能力与规则:R1 文件下载用 ConfinedDir.resolve() 加 send_file,禁用 send_from_directory,避免检查与发送两次解析不一致的 TOCTOU 问题;send_file(Path) 会按扩展名推断 MIME type。R2 路径安全检查统一用 ConfinedDir,禁止 str.startswith,因其存在前缀碰撞缺陷(如 /workspace 与 /workspace_evil)。R3 Agent 工具复用 Workspace.confined_*,因工具参数由 LLM 生成,须视为间接用户输入,入口处复用 ConfinedDir,工具内只调用 jail.resolve()。R4 优先使用 ConfinedDir,禁止裸路径拼接,其封装三层防御:拒绝绝对路径、拒绝 .. 段、resolve 加 is_relative_to。R5 宿主文件系统访问必须设部署模式守卫,新的 Loader/Connector 若直接读取宿主文件系统,须在 data_loader/init.py 的 _enforce_deployment_restrictions() 注册禁用规则,并确保 create_connector() 拒绝已禁用类型。R6 多用户部署必须启用沙箱,WORKSPACE_BACKEND 非 local 时 SANDBOX 须为 docker 或 local,CI/CD 模板默认 SANDBOX=docker。

使用方式:导入 from data_formulator.security.path_safety import ConfinedDir,用 ConfinedDir(root, mkdir=False) 创建约束目录,调用 resolve() 或 write() 完成校验与写入。使用 Workspace.get_file_path() 的场景无需手动调用 ConfinedDir。

限制与注意:not_a_sandbox 模式下 LLM 生成的代码在宿主进程直接执行,可绕过所有路径检查;桌面单用户模式允许访问本机文件系统属预期行为,多用户/云部署下则等于开放服务器读权限。参考文档包括 docs/dev-guides/8-path-safety.md、design-docs/6-path-safety-confined-dir.md、design-docs/issues/002-arbitrary-file-read-audit.md 及 py-src/data_formulator/security/path_safety.py。