安全与权限
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 在默认安全模型上的关键区别,也是其「安全默认」理念的体现。