Как я могу безопасно открыть это внешнее приложение от Electron? - PullRequest
0 голосов
/ 02 октября 2018

Я создаю прототип приложения Electron, которое может открывать предоставленные файлы в стороннем редакторе фотографий, используя Node's childProcess API:

const process = childProcess.spawn(
    'open', 
    ['-a', 'Polarr Photo Editor', filename],
    {shell: false}
);

Я немного обеспокоен безопасностью передачинеобработанный filename в качестве параметра.Для контекста, вот как приложение может работать:

  1. Он запрашивает полезную нагрузку JSON с нашего сервера, который перечисляет набор ресурсов в S3
  2. Эти активы загружаются локально
  3. После этого пользователь может выбрать, какой из них открыть в своем редакторе.
  4. После внесения изменений он может повторно загрузить нам

Меня беспокоит, что атака MITMна первом этапе может означать, что пользователь загружает файл со злонамеренным именем, имя файла, которое может сделать злые вещи при передаче в качестве параметра spawn, например, myCoolFile && doEvilThing ;.jpg.

Я сделалнебольшое тестирование, и я не нашел никаких явных подвигов пока , но я волнуюсь, что могу что-то упустить.

Поэтому я хотел бы знать:

  1. Могут ли параметры, отправленные на spawn захватить команду, вызвать злые побочные эффекты - сделать что-нибудь неожиданное или нежелательное в руках злоумышленника?
  2. Если это так, что я могу сделать?Существуют ли более эффективные альтернативы открытию сторонних приложений из процесса Node?
  3. Есть ли какие-либо общие рекомендации по обеспечению безопасности в приложениях Electron, о которых мне следует прочитать?

1 Ответ

0 голосов
/ 02 октября 2018

Я не вижу в этом проблемы безопасности.Существует две причины

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

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

Ваш пользователь всегда может выполнить open -a Polarr Photo Editor anything_he_want на своем терминале, если он хочет взломать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...