权限与安全边界

用最小权限控制文件、网络、环境变量、子进程、FFI 与动态导入

Deno 默认禁止敏感 I/O。权限属于整个执行线程,不会为每个依赖自动建立独立沙箱。

常用权限

能力精确授权示例
读文件--allow-read=./config,./public
写文件--allow-write=./data
网络--allow-net=api.example.com:443
环境变量--allow-env=PORT,API_KEY
子进程--allow-run=git
动态导入--allow-import=jsr.io

--deny-* 优先于对应的 --allow-*,可从宽授权中排除路径或主机。非交互环境用 --no-prompt,让缺失权限立即失败。

deno run \
  --allow-net=api.example.com:443 \
  --allow-env=API_KEY \
  --no-prompt main.ts

高风险权限

  • -A / --allow-all 关闭沙箱。
  • --allow-run 启动的外部进程不受当前 Deno 权限集约束;尤其不要让受限代码启动 shell 或新的 deno -A
  • --allow-ffi 加载原生机器码,JavaScript 层权限无法约束它的系统调用。
  • 初始静态模块图的加载与程序运行时 I/O 是不同边界;不要把“能 import”理解成“运行后拥有网络权限”。

验证清单

  1. 无权限运行一次,确认失败位置。
  2. 一次只增加一个受限授权。
  3. 在 CI 使用 --no-prompt
  4. 对工具调用、插件和用户代码使用 OS/容器级隔离,不只依赖 Deno 权限。

官方参考:Security and permissionsPermissions reference

输入关键词搜索全部文档。