Vercel Sandbox 用 Firecracker 微虚拟机隔离执行不受信任的代码,包括模型刚生成的脚本。每个沙箱独立、临时、有硬超时,无法回读应用的环境变量。作者把所有「让模型写代码并执行」的功能从 child_process 迁到了 Sandbox。
为什么不能直接在 Vercel Function 里跑 AI 生成的代码?Function 与其余应用共享进程、文件系统和环境。用 child_process.exec 或 eval 执行不受信任的字符串,会把 API 密钥、数据库 URL 等全部秘密暴露给模型写的代码。生成的代码能读环境变量、外联窃取数据,或占满 CPU 拖垮同进程的其他请求。
Vercel Sandbox 底层为每个沙箱启动一个 Firecracker 微虚拟机,与 AWS Lambda 租户隔离用的是同一类虚拟化技术,而非命名空间或 cgroup 容器。逃逸容器的难度是跨内核命名空间边界,逃逸微虚拟机则需要针对一个无其他负载共享的内核找到 hypervisor 级漏洞。
创建沙箱只需一次调用:Sandbox.create({ runtime: 'node22', timeout: 60000, resources: { vcpus: 2 } })。runtime 选基础镜像,timeout 是硬上限,resources.vcpus 控制 CPU。执行 LLM 生成的代码时,先把代码写入沙箱内文件,再作为子进程运行,绝不把模型输出传给 eval 或 Function 构造器。
沙箱默认无状态,每次 create 都是全新文件系统,stop 或超时即彻底销毁。需要跨运行记住状态(如多轮代码解释器对话)时,状态必须存在沙箱外。runCommand 支持 detached 选项,可边运行边把 stdout 流式传回浏览器,默认 Node.js 运行时即可,无需 edge runtime。
沙箱适合模型生成或用户提交的不受信任代码,不适合自己写的可信代码或完整 CI 构建流程——后者应留在部署管道里。沙箱的隔离边界正是它的价值所在。
#开发者 #工具 #Vercel #Sandbox #Firecracker #AI安全 #Nodejs #微虚拟机
@DevToolboxHub