Безопасный доступ к модулям на основе узлов в процессе рендеринга - PullRequest
0 голосов
/ 27 января 2019

После прочтения Руководства по безопасности Electron я отключил nodeIntegeration и включил contextIsolation при создании своего экземпляра BrowserWindow. Это приводит к тому, что средство визуализации не может загружать модули, которые зависят от API-интерфейсов NodeJS (например, require()). Так, например, я не могу использовать electron-store (или electron в этом отношении).

Это также означает, что я не могу использовать IPC, хотя я все равно не смог бы использовать IPC, потому что он JSON сериализует мои пользовательские объекты, что по сути вызывает нарезку объектов путем преобразования моего пользовательского объекта в POJO.

С учетом вышесказанного, как правильно защищать связь между основным процессом и процессом визуализации. Я хочу создать экземпляр приложения Singleton в моем основном процессе, получить к нему доступ в процессе рендеринга (например, загрузить конфигурацию с диска, а затем разрешить пользователю просматривать / редактировать его из рендерера, сохранять изменения обратно на диск) так же безопасно насколько это возможно.

Я смотрел на некоторые другие похожие темы (например, как эта ), и это все еще не работает; кроме того, даже если это сработало, это взлом, и я бы хотел избежать взломов, если есть лучшие способы, которые я просто не могу найти самостоятельно.

1 Ответ

0 голосов
/ 27 января 2019

Зависит от того, откуда ваш контент.В руководстве по безопасности справедливо указывается, что при загрузке удаленного контента следует соблюдать особую осторожность:

Любые ресурсы, не включенные в ваше приложение, должны загружаться с использованием безопасного протокола, например HTTPS 1 *.1006 *

Если содержимое вашего процесса рендеринга упаковано вместе с вашим приложением, я думаю, вы можете быть немного более расслабленным об этом:

function createWindow () {
  mainWindow = new BrowserWindow({width: 800, height: 600});
  mainWindow.loadFile('index.html');
}

В моемcase (YMMV) файл index.html загружается не из HTTPS, а из файловой системы.Этот файл является частью моей кодовой базы и поставляется вместе с самим приложением, и я могу доверять всему этому.

...