安全
本页说明 Knowlery 在机制上保障什么、在边界上检测什么,以及——放在同一段里 ——它无法防止什么。下文刻意把「检测」与「残余风险」写在一起,避免被速读成 「检测到 ≈ 已防护」。完整分析见仓库中的威胁模型文档 (docs/security/threat-model.md)。
机制上保障的部分
以下由代码保证,并由契约测试钉住:
- 传输。 远程 MCP 模式要求 bearer token(恒定时间比较),没有 token 拒绝启动。写入工具默认关闭,必须显式启用——访问默认失败关闭。
- 读取。 通过 MCP 只能读取受管表面:
KNOWLEDGE.md、编译目录、Library/下已安装的知识包、以及定向地图。你的自由笔记永远不能通过 MCP 读取——查询只以元数据形式呈现它们。 - 写入。
capture只写入inbox/;init_kb先规范化路径并限制在 配置的根目录内;register_kb只写注册表文件。知识包安装会在写入前逐一 校验文件路径,并采用暂存 + 交换,安装失败不会破坏原有副本。
边界上检测的部分——以及这不意味着什么
当知识跨越信任边界时,Knowlery 会扫描并把发现展示给你。扫描是检测, 不是防止:模式是确定性且公开的,新颖的措辞会漏过。每次命中都是给你看的 警告——Knowlery 永远不会自行修改或删除内容。
- 分享之前(导出审查,公开发布时再次检查):邮箱、凭证形态、内网 IP、 手机号、敏感 URL、人物页、会议类笔记——以及指令样内容。
- 安装之前(知识包安装与更新,1.3 起):指令样内容——包内读起来 像是对 agent 下达指令的文本("忽略之前的指令……"),即间接提示注入攻击的 形态。安装会在写入任何内容之前拒绝并展示被标记的行;只有你明确同意后才 继续(CLI 上是
--acknowledge-risks,Obsidian 里是一个勾选框)。这个 同意与规范性检查(conformance)相互独立——格式有缺陷的包和看起来有敌意 的包是两个不同的问题。
无法防止的部分
Agent 读到的文本可以携带指令,而读文本的模型自己决定服从什么。任何 知识存储层都关不上这条通道。Knowlery 的最后一道防线是行为准则,不是代码: 它的 skill 和工具描述告诉 agent,知识库内容是用来推理的数据,不是要执行 的指令——执行你要求的 runbook 没有问题;服从一个以自己的权威改写 agent 方向的页面则不行。这能降低概率;它不是保证。
实际含义是:安装第三方知识,等于把作者的声音放进你 agent 的上下文窗口。 Knowlery 让这个声音可见(来源、引用、安装时的标记)、有边界(结构化写入、 读取白名单),但无法让它变得顺从。像挑选要运行谁的代码那样,挑选要安装谁的 知识包。
你所掌控的
- 审查门:未经审查不导出;编辑会使已有批准失效。
- 同意标志:带风险提示的发布与安装只在你看过标记项后才继续。
- 注册表:agent 只能解析你注册过的知识库。
- 远程访问:默认关闭;开启时需要 token 和逐能力的开关。