气隙与离线部署
所有样式表、脚本、字体与图标都由你自己的安装提供,覆盖全部 14 个模板,登录页与注册页也在其中。实测 62 个请求,零外部请求。
Potato 的每一份样式表、脚本、字体与图标,都由它自己的安装提供。 一台没有任何互联网出口的机器,渲染出的界面与一台网络通畅的机器完全相同。已在渲染出的标注页面上实测:62 个请求,零外部请求,登录页与注册页也包含在内。
这对安全研究环境、临床场景、野外部署,以及任何位于严格代理之后的机器都很重要。它既是可用性属性,也是隐私属性。
由安装自身提供的资源
Fabric.js(图像画布)、jQuery、Bootstrap、Font Awesome、Outfit 界面字体、three.js(点云)、OpenSeadragon(深度缩放)、d3、Peaks.js(音频波形)、PDF.js,以及 Potato 自己的全部 CSS 与 JavaScript。
其中有两项是必需的,而非装饰性的。没有 jQuery,跨度标注完全无法工作;没有 Fabric.js,图像画布永远不会初始化,绘图工具虽然渲染出来了,却什么也画不了。
那个字体曾是一处隐私泄漏
styles.css 的开头曾有一条指向 Google Fonts 的 @import。除了破坏离线可用性之外,它还会在每次页面加载时,把每位标注者的 IP 地址与 User-Agent 发送给第三方——而人们自托管这个工具,恰恰是为了让数据不离开自己的基础设施。
它躲过了此前三次气隙审计,因为每道防护检查的都是模板中的 <script src> 与 <link href>,而样式表内部的 @import 两者都不是。该字体现已按 SIL 开放字体许可证随源码提供。
登录页与注册页上一个第三方 favicon 也因同样的原因被移除:那是在用户输入凭据的页面上,向另一家公司的服务器发起请求。
覆盖全部 14 个模板
覆盖范围现已包含登录、注册、密码重置与错误页面。这些恰恰是气隙审计最不容易查到、却最要紧的页面。
随源码提供的文件会做校验和验证
所有随源码提供的文件都会对照其 CDN 公布的哈希做验证,不匹配即拒绝。这些文件是提交进仓库的,因此一次未经验证的下载会随发行版分发给每一位用户。
两份防护允许列表均为空,并且当某一条目不再匹配任何内容时防护会失败,因此一项豁免不可能悄悄变成永久性的。
"气隙"在这里的准确含义
应用本身不需要网络。模型属于一次性传输:在一台联网机器上运行 potato download-models,再把目录拷贝过去即可。你所配置的任何托管 AI 端点,例如 OpenAI、Anthropic 或 Gemini,显然需要对外的通路。
因此准确的说法是**"一旦权重就位于本机即可气隙运行"**,而不是"无需任何准备即可气隙运行"。
相关内容
- 模型库——需要拷贝过去的东西
- 指南:气隙环境下的标注
- 生产环境部署
- 源文档