2013-03-01 2 views
0

У меня есть приложение node.js, которое использует команду child_process.execFile для запуска утилиты командной строки.Как Secure использует execFile для скриптов Bash?

Я обеспокоен тем, что пользователь может запускать команды локально (на ум приходит сценарий ужасов rm/-rf).

Насколько безопасно использовать execFile для скриптов Bash? Любые советы по обеспечению того, чтобы флаги, которые я передал execFile, были экранированы блоком unix, на котором размещен сервер?

Редактировать

Чтобы быть более точным, я более интересно, если аргументы направляются в файл может быть истолковано как команда и выполняется.

Другая проблема заключается в самом скрипте bash, который технически выходит за рамки этого вопроса.

+0

Конечно, это возможно, контроль безопасности с разрешениями. Это безопасно, как вы это делаете. – Chad

+0

Я просто собираюсь бросить это как комментарий, но я бы предложил никогда не использовать пользовательский ввод для чего-то подобного. Если имеется ограниченное количество опций, возьмите вход и затем выберите, какой флаг нужно вставить в команду, но напрямую не вставляйте данные пользователя в команду. – travis

+0

Что вы подразумеваете под «флаги, которые я передаю execFile, экранируются блоком unix, на котором размещен сервер»? –

ответ

1

Использование child_process.execFile само по себе совершенно безопасно, если пользователь не может указать имя команды.

Он не запускает команду в оболочке (например, child_process.exec), поэтому нет необходимости ничего скрывать.

+0

Ahh, поэтому выполняемая команда интерпретирует аргументы, отправленные из кода сервера узла, в качестве фактических аргументов. Тогда действительно безопасность находится в руках самого скрипта и команд, которые он выполняет. –

+1

Справа. Главное, что нужно учитывать в самом скрипте, - это инъекция кода в sed, awk или find, а также для того, чтобы вы обрабатывали (или игнорировали) аргументы с помощью пробелов и строк. –

+0

Отлично, это именно то, о чем я беспокоился.Я думаю, что лучший способ позаботиться об этом (для меня) - удалить все пробелы и новые строки в аргументах, передаваемых в сценарий Bash. Я могу сделать это непосредственно перед тем, как добавить __dirname в строку, чтобы убедиться, что в абсолютном пути есть пробел, и никаких проблем не возникнет. Еще раз спасибо, хотелось бы, чтобы я мог дважды повышать! –

1

child_process.execFile будет выполнять команды с идентификатором пользователя процесса узла, поэтому он может делать все, что может сделать пользователь, что включает удаление всех файлов сервера.

Не рекомендуется вводить команду пользователя, поскольку вы, кажется, подразумеваете свой вопрос.

Возможно, вы запустили скрипт в песочнице, используя chroot, и ограничивая команды и то, что находится в доступной файловой системе, но это может быть завершено в спешке.

Команда, которую вы передаете, будет выполняться непосредственно через какой-либо вкус exec, поэтому, если вы не пытаетесь выполнить это сценарий, это не обязательно должно быть экранировано.

+0

Я не позволяю пользователю установить, какой файл выполняется. Меня больше беспокоит, что аргументы, передаваемые в команду, могут быть интерпретированы как команда. –

+0

Тогда я бы так не волновался. Использование абсолютного пути для команды также гарантирует, что вы знаете, что будет выполнено. –

+0

Вам не нужно ничего избегать, если вы выполняете скрипт. –