логотип PurpleSchool

Node js 20 - экспериментальные permissions

14 июля 2023 г.
317 просмотров
фото команды
Автор

Антон

О релизе

Node.js 20 - новая LTS версия, которая пока еще не является LTS, но станет ей уже осенью. В настоящее время поддерживаются версии 16 и 18, но рекомендуется использовать 18, как текущую LTS.

Установка

Для установки Node.js 20 рекомендуется использовать nvm или другой менеджер версий Node.js, которые облегчает миграцию и смену версии налету. Команда для установки через NVM:

nvm install 20

Permissions

Node.js критиковали за отсутствие безопасности, поскольку он может получить доступ фактически ко всей системе, где он запущен, без ограничений.

Однако, в новой версии Node.js 20 добавлены экспериментальные permissions, которые позволяют ограничить поведение процесса. Для этого используется флаг --experimental-permission и дополнительные параметры, такие как --allow-fs-read="/*".

Создадим простой index.js файл:

const fs = require('node:fs'); 
// require для быстрого теста, можно использовать и mjs

const a = fs.readFileSync('./index.js');
console.log(a);

Теперь запустим как обычно:

node index.js

Все ок, но так мы можем прочитать любой файл в системе и это проблема. Как раз новые permissions позволяют нам это ограничить:

node --experimental-permission index.js

Чтобы ограничить доступ к файлам, нужно запустить команду node с флагом --experimental-permission. При этом, если попытаться прочитать файл index.js, будет выдана ошибка. Чтобы разрешить доступ к определенному файлу, можно использовать дополнительный параметр --allow-fs-read="/*":

node --experimental-permission --allow-fs-read="/*" index.js

Также есть возможность проверить, есть ли у нас определенный доступ, что позволяет работать с разрешениями непосредственно в коде приложения:

const fs = require('node:fs');

const a = fs.readFileSync('./index,js');
console.log(a);
console.log(process.permission.has('fs.write'));

В этом случае, если перезапустить процесс, получим false.

Другие ограничения

Полностью аналогично мы можем ограничить создание новых процессов с помощью [--allow-child-process](https://nodejs.org/api/cli.html#--allow-child-process) и [--allow-worker](https://nodejs.org/api/cli.html#--allow-worker).

Замечу, что на текущий момент это экспериментальная возможность Node.js к которой следует относиться с осторожностью. Пока это можно рассматривать как один из важных шагов в решении текущих проблем Node.js.

изображение курса

Node.js с нуля

Антон Ларичев
иконка часов18 часов лекций
иконка зведочки рейтинга4.9
Node.js с нуля