mirror of
https://github.com/goldbergyoni/nodebestpractices.git
synced 2025-11-02 02:55:40 +08:00
childprocesses
Signed-off-by: Alexander Ivanov <oshli.a.er@gmail.com>
This commit is contained in:
@ -956,7 +956,7 @@ null == undefined // true
|
||||
|
||||
**Иначе:** Наивное использование дочерних процессов может привести к удаленному выполнению команды или атакам внедрения оболочки из-за того, что злонамеренный пользовательский ввод передан неантизированной системной команде.
|
||||
|
||||
🔗 [**Подробнее: Будьте осторожны при работе с дочерними процессами**](/sections/security/childprocesses.md)
|
||||
🔗 [**Подробнее: Будьте осторожны при работе с дочерними процессами**](/sections/security/childprocesses.russian.md)
|
||||
|
||||
<br/><br/>
|
||||
|
||||
|
||||
30
sections/security/childprocesses.russian.md
Normal file
30
sections/security/childprocesses.russian.md
Normal file
@ -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):
|
||||
|
||||
> Никогда не передавайте необработанный пользовательский ввод в эту функцию. Любой ввод, содержащий метасимволы оболочки, может использоваться для запуска выполнения произвольной команды.
|
||||
Reference in New Issue
Block a user