安全与权限

Deno 默认在沙箱中运行代码,不授予任何文件、网络、环境或子进程的访问权限。需要什么,就显式授予什么。

权限标志

通过命令行标志按需开放能力:

sh
deno run --allow-net main.ts          # 允许网络
deno run --allow-read=/data main.ts    # 仅允许读取 /data 目录
deno run --allow-env main.ts           # 允许读取环境变量
deno run --allow-write main.ts         # 允许写入文件系统
deno run --allow-run main.ts           # 允许运行子进程
deno run -A main.ts                    # 授予全部权限(仅开发/可信场景)

权限的作用域

多数权限支持「最小授权」:例如 --allow-read 可限定到具体路径,--allow-net 可限定到具体主机名,从源头降低数据泄露与供应链攻击面。

sh
deno run --allow-net=deno.land,api.github.com main.ts

在代码中请求权限

也可在运行时以编程方式检查或请求权限:

ts
const status = await Deno.permissions.query({
  name: "net",
  host: "deno.land",
});
if (status.state === "prompt") {
  // 这里可以向用户请求授权
}
默认拒绝
未显式授权的操作会直接抛出 PermissionDenied 错误。这是 Deno 与 Node 在默认安全模型上的关键区别,也是其「安全默认」理念的体现。