Антон Ларичев
О релизе
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.
Карта развития разработчика
Получите полную карту развития разработчика по всем направлениям: frontend, backend, devops, mobile
Комментарии
0