Deno 是一个基于 V8 引擎的 JavaScript/TypeScript 运行时,它与 Node.js 相比具有更高的安全性和更先进的模块机制。但是,如果你已经在使用 Deno 一段时间,你就会发现,Deno 的权限管理机制可能很困扰你。本文将深入讨论 Deno 的权限问题,并提供一些解决方案。
Deno 的权限机制
在 Deno 中,每个程序都是一个沙箱,程序被限制在只能访问指定的资源。Deno 程序要访问的资源可能包括网络、文件系统、环境变量等等。这些资源在 Deno 中被称为权限。
在 Deno 中,每个权限都有一个字符串来标识,例如访问文件系统的权限被标识为 "read" 和 "write"。Deno 运行时会将这些权限显式地传递给你的程序,你必须在程序中声明你需要哪些权限。
在程序中声明需要的权限有两种方式。第一种方式是在命令行参数中指定需要的权限。例如,以下命令将允许程序访问文件系统的读、写和网络权限:
- ---- --- ------------ ------------- ----------- ------
第二种方式是在程序中使用一个权限控制 API。例如,以下代码将请求读取一个文件的权限:
----- ---- - ----- --------------------- - ----- ---- ---
如果你尝试运行一个没有授权请求的权限的程序,你会看到 Deno 给出一个友好的错误信息,并告诉你需要哪些权限。
Deno 权限的问题
尽管 Deno 的权限机制是为了增强程序的安全性,但许多 Deno 用户都表示它们很难处理,特别是在编写大型程序时。以下是可能出现的问题:
忘记请求某些权限。当你编写一个程序时,你可能会忘记请求某些必要的权限。在运行时,Deno 将直接拒绝你的请求,并输出一个错误信息。但是,错误信息可能很抽象,难以找到问题。并且,当你尝试调用一个没有授权请求的权限的 API 时,即使出现错误,也可能不会有任何错误信息。
调用外部 API 时经常需要权限。当你使用 Deno 编写一个 HTTP 服务器或 Socket 服务器时,你需要访问网络权限和读/写权限。在每个调用外部 API 时都写上授权请求很麻烦。这使得程序的可读性和可维护性都降低了。
涉及多个权限的代码难以编写和维护。当你需要访问多个权限时,你必须在命令行参数或程序中分别编写每个权限。这很容易出错,并且可能会导致程序的复杂性增加。
解决方案
以下是一些解决 Deno 权限问题的方法:
1. 显式授权请求
尽管在程序中显式授权请求可能很繁琐,但它始终是最直接的解决方案。你可以在程序的顶部声明所有需要的权限:
----- ----------- - - ----- ----- ------ ----- ---- ----- -- ----- ---- - ----- --------------------- -------------
如果你忘记授权任何权限,Deno 将在运行时告诉你。如果你还有任何问题,可以在错误信息中查找权限的名称。
2. 隐藏权限请求
如果你使用多个调用外部 API 的模块,你可能希望隐藏授权请求,以避免在每个调用的时候显式请求。
在 Deno 中,你可以使用 ~/.deno
目录中的配置文件来指定默认的权限。例如:
-- ----------------------- - ------- ----- -------- ----- ------ ---- -
在这个配置文件中,你可以指定默认的权限。这些默认的权限会自动应用于所有的程序,除非你在程序中显式地请求了更多的权限。
3. 权限添加器
为了使你的程序能够轻松地添加和删除权限,你可以编写一个权限添加器。这是一个小型的库,它把所有 Deno 权限组合在一起,让你能够轻松地添加和删除权限。
以下是一个简单的权限添加器的示例代码:
------ ---- ----------- - -------------- --------- ------ ----- --------------- - ------------ ------------ ------------------------ ------------ - ---------------- - ------------ - --------------- ------- - ---------------------------- - ----- - ------------------ ------- - -- ----------- -- ----------------- - ------ ----------------------------- - - ------- - ------ -------------------------------- ------------------ ------- -- --------------------------------- ------- --- - -
使用这个添加器,你可以轻松地添加和删除权限。例如:
----- ----------- - --- ----------------- ----- ----- ------ ----- ---- ----- --- -- ------- ----------------------- ---------------------------- -- ------- ----- ------- - ----- --- ---------------------- --------
4. 适当的文件系统权限
考虑到文件系统访问的风险,Deno 默认情况下对于访问文件系统有很严格的限制。在使用 Deno 的时候,可能会感到很难受。在这种情况下,你可以为它指定一个适当的文件系统权限。
例如,如果你需要在 ./data
目录下进行一些读写操作,你可以使用以下命令来启动你的程序:
- ---- --- ------------------- -------------------- ------
这将允许你的程序在指定的目录下读写文件,同时避免了潜在的安全漏洞。
结论
Deno 的权限机制是一种增强程序安全性的好方法。但是,当它使程序更加复杂和难以维护时,这并不是一个好事。使用合适的工具和方法,你可以轻松地管理 Deno 的权限问题。在开发过程中,牢记 Deno 的正确使用方式可以使你的程序更加安全和可维护。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/671b5fbb9babaf620fab078e