Я хотел бы использовать child_process.execFile (file [, args] [, options] [, callback]) (node.js) для вызова определенного приложения на хост-сервере. Аргумент "файл" определен мной. Безопасно ли передавать необработанный пользовательский ввод в аргумент args? Если нет: как очистить ввод?





Нет, это определенно небезопасно. Пользователь может разумно завершить команду и выполнить отдельную команду, и в зависимости от уровня разрешений, на котором запущено ваше приложение узла, сможет делать массу вещей.
Я не уверен, как вы получаете ввод пользователя, но вы должны проанализировать ввод для конкретных аргументов. Например, если вы хотите передать arg, вы должны взять это из пользовательского ввода и передать child_process.execFile(file, arg, ...).
Вероятно, вам также следует очистить ввод пользователя, что можно сделать различными способами, в том числе с помощью очистить библиотеку. Параметризуя входные данные, было бы довольно просто дезинфицировать, а также ограничить то, что может быть передано.
================================================== =========================
Обновлять:
Теоретически, если вам нужно разрешить пользователю передавать что-либо, вы можете запустить действие в некоторой закрытой среде, например, в контейнере, хотя это довольно сложно и, в зависимости от того, насколько человек хочет испортить ваша система имеет довольно высокий шанс быть обманутым.
Думаю, мой ответ на данный момент может быть чисто теоретическим, но, исходя из опыта, я вижу, что если есть воля, то есть способ. Лучше всего убедиться, что дочерний процесс работает в среде, которая не может испортить что-то в вашей системе в целом.
Если вы достаточно постараетесь, то сможете взломать все, что угодно. Я хочу знать: всегда ли функция, предназначенная для передачи аргументов, является аргументом, а не новой командой? (Конечно, если в функции нет Багов)
child_process.execFile(), если он не использует оболочку?