diff --git a/README.russian.md b/README.russian.md index d09a9e5b..89655190 100644 --- a/README.russian.md +++ b/README.russian.md @@ -956,7 +956,7 @@ null == undefined // true **Иначе:** Наивное использование дочерних процессов может привести к удаленному выполнению команды или атакам внедрения оболочки из-за того, что злонамеренный пользовательский ввод передан неантизированной системной команде. -🔗 [**Подробнее: Будьте осторожны при работе с дочерними процессами**](/sections/security/childprocesses.md) +🔗 [**Подробнее: Будьте осторожны при работе с дочерними процессами**](/sections/security/childprocesses.russian.md)

diff --git a/sections/security/childprocesses.russian.md b/sections/security/childprocesses.russian.md new file mode 100644 index 00000000..e8555906 --- /dev/null +++ b/sections/security/childprocesses.russian.md @@ -0,0 +1,30 @@ +# Будьте осторожны при работе с дочерними процессами + +### Объяснение в один абзац + +Как бы ни были хороши дочерние процессы, их следует использовать с осторожностью. Передача пользовательского ввода должна быть очищена, если не предотвращена вообще. +Опасности несанкционированного ввода, выполняющего системную логику, безграничны, начиная от удаленного выполнения кода и заканчивая раскрытием конфиденциальных системных данных и даже потерей данных. Контрольный список препаратов может выглядеть так + +- избегайте ввода пользователя в каждом случае, в противном случае проверьте и очистите его +- ограничьте права родительского и дочернего процессов, используя идентификаторы пользователя/группы +- запустить процесс внутри изолированной среды, чтобы предотвратить нежелательные побочные эффекты, если другие препараты не сработают + +### Пример кода: опасность выполнения несанированных дочерних процессов + +```javascript +const { exec } = require('child_process'); + +... + +// as an example, take a script that takes two arguments, one of them is unsanitized user input +exec('"/path/to/test file/someScript.sh" --someOption ' + input); + +// -> imagine what could happen if the user simply enters something like '&& rm -rf --no-preserve-root /' +// you'd be in for an unwanted surprise +``` + +### Дополнительные ресурсы + +Из Node.js [документации](https://nodejs.org/dist/latest-v8.x/docs/api/child_process.html#child_process_child_process_exec_command_options_callback): + +> Никогда не передавайте необработанный пользовательский ввод в эту функцию. Любой ввод, содержащий метасимволы оболочки, может использоваться для запуска выполнения произвольной команды.