2.5 Deno权限

默认情况下,Deno是安全的。因此,除非您专门启用它,否则deno模块不能访问文件,网络或环境。要访问安全敏感的区域或功能,需要使用在命令行授予deno进程的权限。

对于以下示例,mod.ts已被授予对文件系统的只读访问权限。它无法对其进行写入或执行任何其他对安全性敏感的功能。

deno run --allow-read mod.ts

权限清单

可以使用以下权限:

  • -A,-- allow -all允许所有权限。这将禁用所有安全性。
  • --allow-env允许环境访问,例如获取和设置环境变量。
  • --allow-hrtime允许高分辨率时间测量。高分辨率时间可用于定时攻击和指纹识别。
  • --allow-net = <允许网络>允许网络访问。您可以指定一个可选的,用逗号分隔的域列表,以提供允许域的允许列表。
  • --allow-plugin允许加载插件。请注意--allow-plugin是一个不稳定的功能。
  • --allow-read = <允许读取>允许文件系统读取访问。您可以指定目录或文件的可选逗号分隔列表,以提供允许的文件系统访问的允许列表。
  • --allow-run允许运行子进程。请注意,子流程未在沙箱中运行,因此与deno流程没有相同的安全限制。因此,请谨慎使用。
  • --allow-write = <允许写>允许文件系统写访问。您可以指定目录或文件的可选逗号分隔列表,以提供允许的文件系统访问的允许列表。

权限允许列表

Deno还允许您使用允许列表来控制某些权限的粒度。

此示例通过仅允许列出/usr 目录来限制文件系统访问,但是由于进程尝试访问/etc目录中的文件,因此执行失败:

$ deno run --allow-read=/usr https://deno.land/[email protected]/examples/cat.ts /etc/passwderror: Uncaught PermissionDenied: read access to "/etc/passwd", run again with the --allow-read flag► $deno$/dispatch_json.ts:40:11    at DenoError ($deno$/errors.ts:20:5)    ...

通过允许列表,以正确的权限再次尝试/etc

deno run --allow-read=/etc https://deno.land/[email protected]/examples/cat.ts /etc/passwd

--allow-write的工作原理与相同--allow-read

网络访问:

fetch.ts

const result = await fetch("https://deno.land/");

这是一个如何允许列出主机/ URL的示例:

deno run --allow-net=github.com,deno.land fetch.ts

如果fetch.ts尝试建立与任何其他域的网络连接,则该过程将失败。

允许对任何主机/ URL的网络呼叫:

deno run --allow-net fetch.ts

会议

瑞安·达尔(Ryan Dahl)。(2020年9月25日)。 Deno安全模型。Speakeasy JS。

你可能感兴趣的:(2.5 Deno权限)