Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

175
Views
Electron: ¿Es seguro exponer los métodos de ipcRenderer con solo una declaración "protección" de "startsWith"?

Tengo una aplicación electrónica y estoy usando contextBridge.exposeInMainWorld para exponer algunos métodos de .on como .on, .removeListener e .invoke , estos métodos están "protegidos" al tener una declaración if que verifica si el "canal" pasado es válido .

Usando el siguiente código:

 const validateIPC = (channel) => { if (!channel || !channel.startsWith("myapp:")) return false; return true; }; contextBridge.exposeInMainWorld("electron", { ipcRenderer: { on(channel, listener) { if (validateIPC(channel)) { ipcRenderer.on(channel, (evt, message) => { listener(evt, message); }); } }, removeListener(channel, listener) { if (validateIPC(channel)) { ipcRenderer.removeListener(channel, (evt, message) => { listener(evt, message); }); } }, invoke(channel, data) { if (validateIPC(channel)) { return ipcRenderer.invoke(channel, data); } }, }, };

¿Es seguro verificar solo si el canal comienza con alguna cadena aleatoria? Vi esto en el código fuente de vscode disponible en github, sin embargo, también leí algunas soluciones usando una matriz de cadenas para validar los canales. Si es seguro, ¿por qué no puedo simplemente exponerlo sin verificar si el canal comienza con algún nombre aleatorio? ¿Hay algún canal predeterminado que no se pueda exponer?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Sí, es absolutamente seguro verificar si el nombre de su canal solo comienza con una cadena "cierta". Si se trata de una cadena "aleatoria", entonces se puede argumentar que hay pocas razones para preocuparse por implementar un sistema de "nomenclatura de canales".

Tiene razón en que puede exponer los métodos de ipcRenderer sin usar los nombres de los canales. Eso en sí mismo no es un problema de seguridad.

P.EJ:

 // Import the necessary Electron components. const contextBridge = require('electron').contextBridge; const ipcRenderer = require('electron').ipcRenderer; // Exposed protected methods in the render process. contextBridge.exposeInMainWorld("electron", { ipcRenderer: { on(channel, listener) { ipcRenderer.on(channel, (evt, message) => { listener(evt, message); }); }, removeListener(channel, listener) { ipcRenderer.removeListener(channel, (evt, message) => { listener(evt, message); }); }, invoke(channel, data) { return ipcRenderer.invoke(channel, data); } } };

Lo que es un problema de seguridad es si configura nodeIntegration: true y contextIsolation: false durante la creación de su ventana. Eso permitiría que cualquier persona que pueda ejecutar Javascript en su representación (por ejemplo, si DevTools aún está accesible) acceder al hilo principal y posiblemente llamar a todo tipo de funciones definidas por el usuario y Node.js. EG: Acceso a bases de datos en línea o API utilizando cualquier clave de API codificada de subproceso principal.

Otra preocupación de seguridad sería si agrega API de electrones particulares a su secuencia de comandos preload.js que simplemente no debería ser accesible desde los subprocesos de procesamiento.

En cuanto a los "canales predeterminados que no se pueden exponer", los canales en sí no son un problema, son las funciones subyacentes (expuestas) las que pueden plantear un problema de seguridad si se puede acceder a ellas desde los subprocesos de procesamiento.

La implementación de un sistema de "nomenclatura de canales" dentro de su archivo preload.js solo permite una forma más fácil de rastrear y administrar eventos de IPC, tal como se hace con los eventos de Node.js. No es para todos y de ninguna manera es obligatorio / requerido tener un script preload.js que use el sistema de "nombre de canal". Es una preferencia puramente personal.

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!