前言
Deno 是一个用于开发服务器端和命令行应用程序的新型 JavaScript/TypeScript 运行时环境。Deno 的设计目标是安全,同时提供良好的开发体验和性能。Deno 带有升级版的 V8 引擎,使用 Rust 编写的高效 HTTP 服务器和文件 I/O 系统,并带有强制性的模块依赖管理系统。
在 Deno 中,有一个非常重要的概念,那就是安全模式。本文将探讨 Deno 安全模式的优点和限制,为读者提供深度的学习和指导意义。
安全模式的优点
模块权限限制
Deno 中的每个模块都是独立的,不同于 Node.js,Deno 带有强制性的模块依赖管理系统。在安全模式下,Deno 会限制模块对系统资源的访问权限,只有被明确允许的模块才能够访问系统资源。这样可以有效地避免模块间的权限冲突和越权访问。
下面是一个例子:
-- -------- ----- ---- - ----- --------------------- - ----- ---- --- -- -------- ----- -------- ---------- - --- ------------------ ----- ------------------- --------- -- -------- --- -------- --- -- --------- ------- -- -- ------ ----- -------- --- ------ --------- ----- -- ------- -- -------- -- -- ---- ----- -------- ---- --- ---- ------ -- --------
在这个例子中,文件 test.txt
在 file1.ts
中被打开,file2.ts
想要从这个文件读取数据。在不安全模式下,file2.ts
可以直接访问文件句柄 file.rid
。在安全模式下,因为 file2.ts
不在 file1.ts
同一模块中,它将没有权限访问这个文件句柄。
网络权限限制
在 Deno 安全模式下,Deno 只允许模块访问其要求的网络资源。例如,模块只能访问其 import
声明中列出的域,或通过命令行参数 --allow-net=<allow_regex>
指定的域。这样可以有效地避免恶意模块访问不在白名单中的网络资源。
文件系统权限限制
在 Deno 安全模式下,Deno 只允许模块访问其要求的文件系统资源。例如,模块只能访问其 import
声明中列出的路径,或通过命令行参数 --allow-read=<allow_regex>
和 --allow-write=<allow_regex>
指定的路径。这样可以有效地避免恶意模块访问不在白名单中的文件系统资源。
沙盒环境
Deno 安全模式下提供了一种比较安全的沙盒环境,每个模块都以独立的进程运行。这个设计可以有效地避免模块之间的影响,同时也可以提高程序的健壮性和可靠性。
安全模式的限制
代码复杂度
由于每个模块都运行在独立的进程中,因此模块间的通信需要使用 IPC(进程间通信)。这个设计有一个很明显的缺点,就是提高了模块间通信的复杂度和延迟,尤其是当模块之间需要频繁地通信时,会显著降低程序的性能和效率。
IO 效率
由于安全模式的限制,模块对系统资源的访问权限被严格限制。这样一来,模块的 IO 效率显然会受到影响,尤其是当模块需要频繁地读取或写入系统资源时,会显著降低程序的IO性能。
配置复杂度
由于安全模式的限制,Deno 应用程序需要在启动时设置大量的命令行参数,以指定被允许访问的网络和文件系统资源。这个设计可以确保程序的安全性,但也显著增加了程序的配置复杂度和管理负担。
如何在 Deno 中使用安全模式
要在 Deno 中使用安全模式,我们需要在启动程序时设置相关的命令行参数。下面是一个示例:
- ---- --- -------------- --------------------- ---------
这个命令行指定了 my_app.ts
可以读取当前目录的文件,可以连接到 deno.land
网络资源。还可以使用 --allow-write=<allow_regex>
指定程序可以写入的路径。
需要注意的是,一旦程序运行,Deno 就不允许对命令行参数进行修改,因此在应用程序开发时需要考虑到这个限制。
结论
总之,Deno 安全模式是 Deno 设计中一个很重要的的概念,它能有效地保障应用程序的安全性。通过合理地使用安全模式,可以实现程序的安全性和可靠性,但也需要开发者在程序设计和开发过程中考虑到一些限制和设计缺陷。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/66f0afbd6fbf96019733b8c3