1.9 KiB
安全边界
信任与隔离
Pi 没有内置 Sandbox;Project Trust 不是 Sandbox。Extension/Tool 与 Pi 继承 Node 进程权限。课堂版只提供应用层最小权限,不能替代容器、VM、micro-VM 或远程 sandbox。
凭证
密钥只在 Session InMemoryCredentialStore 中存在。输入/输出/log/SSE 均按 allowlist 和 redaction 处理;前端不持久化密钥。不接受任意 headers、命令型凭证解析或 query key。
路径
SafeWorkspace 对绝对路径、..、NUL、canonical root、父目录 realpath 和符号链接做检查。保存路径固定为 report.md,临时文件使用排他打开、O_NOFOLLOW,同步后原子 rename。Skill 正文例外读取只允许已发现索引中的 canonical SKILL.md。
图片
扩展名、声明 MIME、magic bytes 三重一致;只收 JPEG/PNG/WebP;限制字节与总像素;sharp 自动旋转并重新编码,移除 EXIF/ICC;随机服务端文件名;附件只能通过 (sessionId, attachmentId) 查找。
表格附件
只接收 XLSX、UTF-8 CSV 和 UTF-8 TSV;默认限制 20 MB。XLSX 校验 ZIP 签名和工作簿关键条目,CSV/TSV 拒绝 NUL 与非法 UTF-8。原始文件使用随机服务端文件名写入当前 Session,模型只能把当前 Session 的 attachmentId 交给固定的 analyze_uploaded_report 工具;工具以无 shell 的参数数组执行仓库内置分析器。
SSRF
Base URL 拒绝非 HTTPS(开发 loopback 除外)、userinfo、fragment、凭证参数、畸形 URL、私网/loopback/link-local/metadata 解析结果。生产应再配置 egress proxy,在每次重定向/连接前做等价检查;本课堂实现不主动跟随连接测试重定向。
审批
审批发生在 Pi tool_call、Tool 执行之前。Broker 决策是唯一权威;超时等同拒绝;Abort/删除立刻取消;重复同决定幂等、冲突决定 409。审批不替代路径和 schema 校验。