sandboxing

3 posts

你的 C 依赖库可能让整个进程崩溃。WebAssembly 可以阻止它。

用容器来隔离单个 C 库未免小题大做。将其编译为 WebAssembly,在 WASI 沙箱中运行,即可实现内存安全、基于权能的文件系统访问和崩溃隔离,无需 Docker。

C 库内部的一次空指针解引用就可能导致整个应用程序崩溃。如果该库负责解析用户输入、解压图像或处理网络协议,那么一个畸形的数据包就足以引发崩溃。容器确实能解决这个问题,但仅为一个依赖项就启动 Docker,无异于为盆栽雇佣保镖。你需要的是没有额外开销的隔离。 WebAssembly 加上 WASI…

你的依赖能读取环境变量。JavaScript允许它们这么做

Ambient Authority意味着Node.js进程中的任何代码都能触碰文件系统、网络和运行环境。本文将讲解如何通过lockdown、compartment和显式capability传递来剥除它。

一个被攻破的传递依赖就能外泄你的 、写入你的文件系统、打开出站连接。它不需要你的代码存在漏洞。它只需要存在于同一个进程里。在JavaScript中,每个模块默认继承运行时的全部权限。这就是Ambient Authority,而移除它是你能对Node.js应用做的最有效的安全升级之一。 Ambient…

你的依赖可以读取磁盘上的任何文件。cap-std 让它们先请求权限。

Rust 的标准库向每个依赖授予隐式的文件系统权限。cap-std 将其替换为基于权能的 API,强制代码在打开路径之前证明它有权访问该路径。

你依赖树中的任何一个 crate 都可以打开 、向你的 目录写入内容,或者枚举你项目中的每一个文件。Rust 的标准库不会请求许可。它假设任何能够调用 的代码都有权接触操作系统允许的任何路径。 cap-std 改变了这一假设。它是 Rust I/O module…