详解 Deno 的权限管理机制

面试官:小伙子,你的代码为什么这么丝滑?

Deno 是一个新兴的 JavaScript 运行时环境,它是由 Node.js 的创始人 Ryan Dahl 所创建的,与 Node.js 相比,Deno 做了一些不同的尝试,其中比较显著的就是“安全性”的改进。Deno 针对浏览器和服务器两端设计,扩展了浏览器的能力,同时解决了 CommonJS 的一些问题,更加符合现代 JavaScript 语言特性。在 Deno 中,在代码执行前需要明确给予权限,这种权限管理的机制与 Node.js 有很大的不同,本文就来详解一下 Deno 的权限管理机制。

Deno 的安全设计

Deno 采用了诸多安全措施来保护应用程序免受潜在威胁,其中最显著的措施就是默认禁止读写操作,也就是说 Deno 不会允许任何文件和网络的操作,直到显示地赋予了相关的权限。而 Node.js 并没有类似的安全机制,它的默认行为就是拥有完整的系统访问权限,这会给攻击者提供更多的机会。Deno 的相对安全性在很大程度上得益于它的 Rust 代码库,Rust 语言致力于提供系统级别的安全保障,是一种内存安全、数据并发安全、线程安全、无垃圾回收等特性集于一身的系统编程语言,现在成为了 WebAssembly 的事实标准语言。

Deno 的权限管理机制

Deno 的权限管理机制为模块的导入引入了一种新的方式,不同于 Node.js 中的 require(),Deno 中需要显式地给予权限,这也是它的突出特点之一。在 Deno 中,一个模块如果需要读取文件或者向网络发送请求等等任何操作,则它需要在引用该模块时指定相关的权限。Deno 将所有的需要权限的操作放到了一个命名空间:Deno,这是一个全局对象,程序运行时会有多种方式获取它:

-- --------
----- ------ - ----- ----------------------------- ------- ----- ---------------

-- ----
------ - ---------- - ---- -------

----- -------- --------------------- ------------ ---------------- -
  ----- --- - ----- -----------------------------
  ------ ---------- --- -----------
-

-- ------
----- -------- ---------------------- ------- ----- ------- -
  ------ -------- -
    ---- -------
      -- ------ ---------------------- ------- ------- -
        ----- ---- - ----- ----------------
        ----------------- -----------------
        ---------------------
      -
      ------
    ---- --------
      -- ------ ---------------------- -------- ------- -
        ----- ---- - ----- --------------- ------- ----- ------- -------
        ----- -------------------- --- ---------------------------- ----------
        ---------------------
      -
      ------
    -- ---
  -
-

Deno 的权限管理机制有以下几种特点:

  1. 显示申请权限:Deno 的权限申请时显示的,每个需要相应权限的模块都需要在导入之前申请。这里没有 Node.js 中的隐式加载的机制。

  2. 权限列表:Deno 为了方便管理,将所有的操作权限都放在了 Deno 对象下的 permissions 属性上,便于管理和维护。

  3. 紧急授权:当 Deno 运行时检测到需要进行权限访问的操作时,会向用户提示需要什么权限,并且给出相应的 URL 让用户点击对应权限的按钮进行授权。

  4. 运行时权限:权限是在运行时赋予的,这意味着他们可以和程序的其它部分互动。

权限管理的指导

Deno 的权限管理机制中涉及到的权限操作及其作用如下:

  1. --allow-env 允许在程序中操作环境变量。

  2. --allow-net 允许 TCP,UDP,TLS 和 WebSocket 等协议。

  3. --allow-plugin 允许程序加载浏览器插件。

  4. --allow-read 允许程序读取目录、文件等。

  5. --allow-run 允许程序使用子进程。

  6. --allow-write 允许程序写文件,创建目录等。

根据需要来选择相应的权限操作,既要保证程序的安全性又要保证程序能够输出正确的结果。需要注意的是,在代码中使用权限操作时要符合开源协议和版权等规定。

权限管理的实例

下面一个例子,我们将限制程序只能访问 www.google.com,在没有给予 --allow-net 权限时代码将无法执行。

----- ---- - ----- ---------------------------------------- -- ------------

------------------

当我们在命令行中不给予权限,程序运行时出现以下错误:

------ -------- ------ ---------- ------- ------- ------
    -- -------------- -----------------------------------
    -- --------------- -----------------------------------
    -- -------------

我们可以通过给予权限来避免这个错误:

---- --- -------------------------- -------------------------------

结论

Deno 的权限管理机制是一个非常好的设计,它避免了 Node.js 存在的不足,并加强了程序的安全性,可以有效地避免程序遭受攻击造成损失。总之,学习 Deno 的安全机制和权限管理机制是必要的,它将为我们的代码编写提供很大的帮助。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/67027c0bd91dce0dc8478c92


猜你喜欢

  • 在 ES9 中实现命名捕获组解决正则表达式的问题

    在前端开发中,正则表达式是一个重要的工具,用于在字符串中查找和匹配特定的模式。然而,使用正则表达式时,经常会遇到一些问题,比如难以识别匹配组,或者难以在匹配结果中准确区分多个捕获组。

    14 天前
  • 从零开始使用 Sequelize

    Sequelize 是一个基于 Node.js 的 ORM(Object Relational Mapping)框架。它提供了一种方便的方式来操作关系型数据库,从而简化了开发者的工作。

    14 天前
  • 测试 Deno 中的 API,需要注意什么

    前言 由于 JavaScript 语言的流行,前端开发变得越来越受欢迎。然而,随着时间的推移,更多的开发人员发现了其局限性并在不断地寻找更好的解决方案。Deno 是一款由 Node.js 的创始人 R...

    14 天前
  • 如何在 Vue.js 项目中使用 Server-sent Events 实现实时数据更新

    前言 在现代 Web 开发中,实时数据更新已经成为了一种趋势。而实时数据更新则需要通过接口的推送来完成,而 Server-sent Events(SSE)就是一种实现这个目标的技术。

    14 天前
  • Serverless 平台:为什么它正在颠覆应用程序的开发模式

    Serverless 是一种新兴的云计算架构,它允许应用程序开发者将注意力转移至应用程序的核心逻辑,而非架构环境运营。在 Serverless 架构中,应用程序无需关心服务器和操作系统等底层技术,仅需...

    14 天前
  • Knapsack: 一个 Headless CMS 工具箱

    Knapsack 是一个为前端开发者设计的 headless content management system (CMS) 工具箱。它提供了一组 API,方便开发者使用自己的编程语言和框架,对同一组...

    14 天前
  • 使用 PWA 改进网站在 iOS 设备上的体验

    Progressive Web App (PWA) 所带来的好处已经被广泛讨论过了,其中最大的优势是可以帮助我们提升网站的性能、速度和可靠性,尤其是在移动设备上。然而,对于 iOS 设备来说,PWA ...

    14 天前
  • 如何在 Mocha 中测试 HTTP 接口

    如何在 Mocha 中测试 HTTP 接口 在前端开发中,测试是不可或缺的一部分。测试可以帮助我们发现应用程序中的错误和漏洞,确保应用程序的质量和稳定性。在本文中,我们将探讨如何使用 Mocha来测试...

    14 天前
  • Redux 中异步请求如何处理 loading 状态?

    Redux 是一种流行的 JavaScript 应用程序状态管理库,它的优势在于它可以有效地管理应用程序状态和逻辑,因此很适合前端开发。在实际应用中,我们经常需要进行异步请求,而在执行异步请求的过程中...

    14 天前
  • 如何在 Custom Elements 中使用 React?

    在前端开发中,我们经常会使用 Custom Elements 来封装一些复杂的组件。而 React 作为当下最流行的前端框架之一,也常常被用来构建复杂的 Web 应用。

    14 天前
  • LESS 循环语句应用于复杂样式的技巧

    LESS 是一种动态样式表语言,它扩展了 CSS,并添加了许多有用的特性,其中之一就是循环语句。通常,我们可以使用 LESS 循环语句轻松地创建一些重复的样式,但这不是它的全部功能。

    14 天前
  • RESTful API 常见错误的定位与解决办法

    RESTful API 已经成为现代 Web 开发中的一个重要组成部分。创建一个高质量的 RESTful API 可以为用户提供很好的应用体验。但是,即使是有经验的开发者,有时也会碰到既棘手又琐碎的问...

    14 天前
  • Next.js 报错:SyntaxError: Unexpected token '<'

    前言 Next.js 是一个流行的 React 应用程序框架,它为我们提供了很多有用的功能,例如自动 SSR(服务器端渲染)、代码分割、基于页面的路由等等。但有时,当我们开发应用程序时,会遇到各种诡异...

    14 天前
  • Fastify Web 框架:一个快速而安全的 Node.js 框架

    在 Node.js 应用程序开发中,开发人员需要使用 Web 框架来处理 HTTP 请求和响应。Fastify Web 框架是一个新的 Node.js Web 框架,它是一个快速而安全的框架,具有出色...

    14 天前
  • 如何处理 Promise 中的错误?

    Promise 是一种用于异步编程的技术,它可以让我们更好地控制代码的执行流程,并且可以使代码更加简洁和易于维护。但是,在实际使用中,我们经常会遇到 Promise 的错误处理问题。

    14 天前
  • 使用 Node.js 和 Mocha 实现单元测试的方法

    在前端开发中,单元测试是非常重要的一部分。它能够确保我们的代码在修改后依然能够正常工作,同时也有助于我们发现和解决潜在的软件缺陷。在本文中,我们将探讨如何使用 Node.js 和 Mocha 来实现单...

    14 天前
  • 解决 Hapi 框架使用 Inert 插件时遇到的缓存问题

    在 Hapi 框架中,Inert 插件是用于静态文件服务器的模块,可以在 Hapi 应用程序中提供静态文件的访问。但是,在使用 Inert 插件时,有时候会遇到缓存问题。

    14 天前
  • MongoDB 集群 —— 横向扩展才是王道

    前言 随着 Web 应用程序的不断增长,对于数据存储需求越来越大。传统的关系型数据库难以满足这些需求,特别是在处理海量数据和高并发访问的时候。 MongoDB 是一个非常流行的文档型数据库,以其良好的...

    14 天前
  • 如何使用 ES9 实现多种实时搜索

    随着互联网的飞速发展,搜索已经成为了我们日常生活中必不可少的一部分。通过搜索引擎,我们可以轻松地找到自己想要的答案、产品、服务等等。在网站和应用程序中实现搜索也是至关重要的,而实时搜索则是一种非常流行...

    14 天前
  • 在 Kubernetes 中使用分类帐(ledger)应避免的错误

    在 Kubernetes 中使用分类帐(ledger)可以帮助我们实现更好的应用程序跨多个节点和容器间的数据管理。然而,在使用分类帐时,会遇到一些常见的错误,这些错误会对应用程序的稳定性产生不良影响。

    14 天前

相关推荐

    暂无文章