Я создаю прототип приложения Electron, которое может открывать предоставленные файлы в стороннем редакторе фотографий, используя Node's childProcess
API:
const process = childProcess.spawn(
'open',
['-a', 'Polarr Photo Editor', filename],
{shell: false}
);
Я немного обеспокоен безопасностью передачинеобработанный filename
в качестве параметра.Для контекста, вот как приложение может работать:
- Он запрашивает полезную нагрузку JSON с нашего сервера, который перечисляет набор ресурсов в S3
- Эти активы загружаются локально
- После этого пользователь может выбрать, какой из них открыть в своем редакторе.
- После внесения изменений он может повторно загрузить нам
Меня беспокоит, что атака MITMна первом этапе может означать, что пользователь загружает файл со злонамеренным именем, имя файла, которое может сделать злые вещи при передаче в качестве параметра spawn
, например, myCoolFile && doEvilThing ;.jpg
.
Я сделалнебольшое тестирование, и я не нашел никаких явных подвигов пока , но я волнуюсь, что могу что-то упустить.
Поэтому я хотел бы знать:
- Могут ли параметры, отправленные на
spawn
захватить команду, вызвать злые побочные эффекты - сделать что-нибудь неожиданное или нежелательное в руках злоумышленника? - Если это так, что я могу сделать?Существуют ли более эффективные альтернативы открытию сторонних приложений из процесса Node?
- Есть ли какие-либо общие рекомендации по обеспечению безопасности в приложениях Electron, о которых мне следует прочитать?