Dois-je utiliser l'isolation de contexte avec mon application Electron

Sep 10 2020

Mon ami et moi avons presque terminé notre projet . Il s'agit essentiellement d'une application / miniplayer en cours de lecture pour Spotify. Lorsque je vérifiais la console du processus de rendu, j'avais un autre avertissement que je voulais effacer. Il s'agissait d' worldSafeExecuteJavaScriptêtre vrai et comment c'est dangereux. J'ai regardé plus loin et il s'avère que je dois contextIsolationaussi m'allumer. J'ai fait plus de recherches et j'ai découvert que je ne peux pas utiliser requiredans mon processus de rendu. J'ai essayé de consulter la documentation et je suis confus. Nous voulons rendre notre application sécurisée à long terme, d'autant plus que je suis à l'université et que mon ami qui y travaille pourrait être occupé à mesure que son école se développe; et aussi puisque contextIsolationsera vrai par défaut dans Electron 12.

Dans nos processus de rendu javascript, nous avons juste besoin de jQuery et ipcRenderer. Comment pourrions-nous incorporer contextBridge(je pense que c'est ce que l'on appelle), pour importer jQuery et ipcRenderer dans notre javascript pour le processus de rendu?

Réponses

kyleawayan Sep 11 2020 at 15:51

J'ai eu mon application sur laquelle travailler contextIsolationen utilisant contextBridge. Voici mon main.js webPreferencesavec le script de préchargement:

    webPreferences: {
      worldSafeExecuteJavaScript: true,
      contextIsolation: true,
      preload: path.join(__dirname, "preload.js")
    },

et voici preload.jspour importer le ipcRenderer:

const { contextBridge, ipcRenderer } = require('electron')

contextBridge.exposeInMainWorld(
    'ipcRenderer',
    {
/*
Important note: This will get it working, 
but I'm going to make multiple methods for 
each time I'm using this to heighten security.
https://www.electronjs.org/docs/tutorial/context-isolation#security-considerations
*/
      send: (channel, arg) => ipcRenderer.send(channel, arg),
      on: (event, data) => ipcRenderer.on(event, data)
    }
)

Pour importer jQuery , je viens de l'importer avec index.html:

  <head>
    <meta charset="UTF-8">
    <title>Gemini</title>
    <meta http-equiv="Content-Security-Policy" content="script-src 'self'">
    <link rel="stylesheet" href="style.css">
    <link rel="stylesheet" href="macos.css">
    <script type="text/javascript" src="node_modules/jquery/dist/jquery.min.js"></script>
    <link rel="stylesheet" href="node_modules/@fortawesome/fontawesome-free/css/all.css">
  </head>

Je ne suis pas sûr que l'importation de jQuery via le HTML soit plus sûre.