Montanalabs/ondos-lang

GitHub: Montanalabs/ondos-lang

Ondos 是一门将信任与能力融入类型系统的注入安全编程语言,通过编译期检查结构性证明程序不存在 prompt injection 漏洞。

Stars: 1 | Forks: 0

Ondos

Ondos

一种将信任与能力作为类型系统中一等公民的语言。
Prompt injection 是不可表示的 —— 这是编译时的结构性拒绝,而非启发式判断。

release license built with cc Montana Labs

## 为什么需要它 Prompt injection 是 AI agent 决定性的安全漏洞:不受信任的内容 —— 例如 一个网页、一封邮件或一个工具的返回结果 —— 携带了指令,而 agent 执行了这些指令。 如今,人们通常通过过滤器、正则表达式以及*通常*会拒绝执行的大模型来对抗它。Ondos 则将其变成了一种**类型系统属性**:不受信任的数据是*被污染的*(tainted),而被污染的 数据**无法**触及特权操作、驱动控制流,或被视作 受信任的数据,除非它首先通过显式的 `extract` 边界进入一个闭合(有限)的 类型中。存在此类漏洞的程序根本无法编译。其旗舰级应用是 **注入安全的 AI agent**。 ## 20秒了解核心理念 ``` grant delete type FileId = Home | Trash | Temp let page = fetch # UNTRUSTED data — tainted quarantined { # the only place tainted -> trusted, and only let id = extract(page) # into a CLOSED type (a finite value set) } privileged { # holds capabilities; may never touch tainted data delete(id) # OK: `id` is trusted and clamped to a FileId } ``` 尝试直接调用 `delete(page)` 会被检查器拒绝 —— `page` 中注入的指令 永远无法成为 `delete` 的参数。而且在运行时,编译后的二进制文件会将 `extract` 的输出重新限制为该闭合类型,因此不符合规范的有效注入载荷(payload)会在 信任边界处被拒绝(深度防御)。 ## 它所强制执行的内容 四个**后果维度**,均经过静态检查且可组合: - **信任(Trust)** —— 被污染的数据无法触及 sink、改变条件分支,或在未经 `extract` 处理前被信任。 - **成本(Cost)** —— 每个能力(capability)都有对应的成本,以及一个程序 `budget`(递归/循环受限)。 - **可逆性(Reversibility)** —— 不可逆的操作需要一个显式的 `commit` 代码块。 - **置信度(Confidence)** —— 提取出的值带有确定性下限,sink 可以对此提出要求。 此外还有**能力**:按程序授予,是一等公民的值,你可以将其传递、 通过 `using` 向内衰减,或通过 `allow` 批量禁止。 ## 安装 **macOS, Linux, WSL:** ``` curl -fsSL https://montanalabs.ai/ondos-lang/install.sh | bash ``` 该过程会获取源代码,通过 C 编译器构建工具链,并将统一的 `ondos` 命令(以及 `check`, `ondosc`, `ondoc`, `ondos-pkg`, `ondos-lint`, `ondos-fmt`) 添加到你的 PATH 中。仅需要 C 编译器 —— **不需要 Node.js, Rust 或 Python**。它还 会将 Ondos 语法高亮扩展安装到它能找到的每一个编辑器中(VS Code, Cursor, …)。 使用 `ONDOS_VERSION` 来固定一个可复现的 [release](https://github.com/Montanalabs/ondos-lang/releases) —— 当你的平台存在对应的预编译二进制文件时,它也会使用**预编译二进制文件**(速度快,免编译),否则会回退到从源码构建: ``` curl -fsSL https://montanalabs.ai/ondos-lang/install.sh | ONDOS_VERSION=latest bash ``` 默认情况(未指定 `ONDOS_VERSION`)会跟踪 `main` 分支并从源码构建。无论哪种方式, `ondosc` 都需要 C 编译器来编译*你的*程序 —— 因为 Ondos 会生成 C 代码。 ## 开始一个项目 ``` ondos new myapp && cd myapp # scaffolds ondos.toml + an injection-safe main.wave + .gitignore ondos add mathx 1.2.0 # record a dependency (caret ^1.2.0) ondos info # project metadata (author, license, …) + dependencies ondos run main.wave # check (gate on SAFE), compile, and run ondos serve service/ # serve a multi-module service over HTTP (path → route, body → input) ``` (`ondos init` 会在当前目录执行相同的操作。) `ondos` 是统管整个工具链的 CLI: ``` ondos check app.wave # prove injection-safe -> SAFE / UNSAFE ondos build app.wave -o app # compile to a standalone native executable ondos fmt app.wave # format in place — a file or a whole dir (--check for CI) ondos lint app.wave # cleanliness + ondoc doc-consistency ondos version # print the toolchain version ondos help # list all commands ``` 如果你 更喜欢直接调用它们,每个子命令也是一个独立的二进制文件(`check`, `ondosc`, `ondos-fmt`, …)。 ## 自托管与原生 Ondos 是**自托管**的:它的 lexer、parser、注入安全检查器、编译器、 package manager、linter 和 formatter 都是**用 Ondos 编写的**(`examples/*.wave`)。 编译器生成 **C** 代码,因此 Ondos 程序会成为独立运行的原生可执行文件, 并且整个工具链仅靠 **C 编译器** 即可构建。编译器和检查器 以生成的 C 代码形式签入(`native-codegen/ondosc.c`, `native-codegen/checker.c`) 并且是**自举的**:`ondosc` 将其自身的 Ondos 源码重新编译为字节完全相同的 `ondosc.c`。唯一非 Ondos 的代码是一个约 300 行的 C 运行时垫片(shim)以及 libc。 ## 文档 - **示例库** —— 200 个自包含的注入安全项目(189 个应用 + 11 个混合服务,每个都包含一个安全/漏洞对以及演示),涵盖 10 个领域,现位于同级目录的 `ondos-examples/` 库中(每一个注定都会成为其独立的仓库) - **[注入安全的 agent](docs/injection-safe-agent.md)** —— 核心动机指南 - **[Packages](docs/package-manager.md)** —— `ondos-pkg` 依赖管理器 - **[Linter](docs/linter.md)** —— `ondos-lint` 整洁度 + ondoc 文档一致性检查 - **[Formatter](docs/formatter.md)** —— `ondos-fmt` 规范化布局 - **[API 参考](docs/api/README.md)** —— stdlib + 工具链 - **[ondoc](docs/ondoc.md)** —— 文档约定 - **[威胁模型](docs/threat-model.md)** —— 工具链能够防范及无法防范的内容 ## 构建与测试 ``` native-codegen/bootstrap.sh # build with cc (compiler + checker + pkg + lint + fmt), verify the self-hosting fixpoint native-codegen/test.sh # native regression + linter + formatter suites ``` ## 状态 **预览版。** 其核心安全性主张由检查器的设计和原生 回归测试套件提供支撑 —— 它**尚未**经过外部审计。请将 `SAFE` 的结论视为 强有力的工程主张,而非经过审计的保证。请参阅 [docs/threat-model.md](docs/threat-model.md) 和 [SECURITY.md](SECURITY.md)。 ## 贡献与安全 欢迎贡献 —— 请参阅 [CONTRIBUTING.md](CONTRIBUTING.md) 和我们的 [行为准则](CODE_OF_CONDUCT.md)。发现了可靠性漏洞或安全漏洞?请 按照我们的 [安全策略](SECURITY.md) 私下报告,而不是公开提出 issue。 ## 许可证 [Apache-2.0](LICENSE) © Montana Labs.
标签:客户端加密, 类型系统, 编程语言, 编译器