Node.js 20 发布,引入实验性权限模型以提升安全性

Node.js v20 发布概述

Node.js 团队最近发布了 Node v20 版本(当前版本)。该版本将在今年 10 月进入长期支持(LTS)阶段后,正式适用于生产环境。Node v20 的主要特性包括实验性的权限模型,以提升安全性,以及将 Node 应用程序构建为独立可执行文件的功能。

主要特性

实验性权限模型

Node v20 引入了实验性的权限模型,开发者可以通过 --experimental-permission 标志启用该功能。启用后,所有可用权限将被限制。目前可配置的权限包括:

  • 文件系统访问(如 --allow-fs-read--allow-fs-write 标志)
  • 创建子进程(--allow-child-process 标志)
  • 创建工作线程(--allow-worker 标志)

例如,使用 --allow-fs-write=* --allow-fs-read=/tmp/ 将允许对 /tmp/ 文件夹的 FileSystemRead 访问,并允许所有 FileSystemWrite 操作。

权限是进程范围的,开发者无法仅针对特定模块拒绝权限。默认情况下,启用了 --experimental-permission 的进程将无法创建子进程。如果启用了 --allow-child-process 标志,用户需负责传递正确的参数以创建具有适当权限的子进程。

独立可执行应用

Node v20 支持将 Node 应用程序构建为独立可执行文件(单文件应用),适用于未安装或无法安装 Node.js 的用户。该功能支持 Windows、MacOS 和 Linux 平台(除 Alpine 外的所有 Node.js 支持发行版,以及除 s390x 和 ppc64 外的所有架构)。微软正在试验单文件应用,以减少向量攻击。

测试运行器

Node v19 中引入的测试运行器在 v20 中已稳定,标志着其已具备生产环境使用的成熟度。

V8 引擎更新

Node v20 中的 V8 JavaScript/WebAssembly 引擎更新至 11.3 版本,提供了新的 JavaScript API,包括通过复制改变 ArrayTypedArray 的方法,以及可调整大小的 ArrayBuffer 和可扩展的 SharedArrayBuffer。此外,Node v20 还支持 V8 11.2 中引入的 WebAssembly 尾调用功能。

其他改进

import.meta.resolve() 的调用现在变为同步。

开源与贡献

Node.js 是开源的,采用 MIT 许可证,由 Open JS Foundation 维护。团队鼓励开发者通过 Node.js 贡献指南行为准则 提供反馈和贡献。

阅读 23
0 条评论