Browse Source

docs: explain ipcRenderer behavior in context-bridge.md (#43582)

* docs: explain ipcRenderer behavior in context-bridge.md

Co-authored-by: Kilian Valkhof <[email protected]>

* Update context-bridge.md

Co-authored-by: Kilian Valkhof <[email protected]>

* Update context-bridge.md

Co-authored-by: Kilian Valkhof <[email protected]>

* Update docs/api/context-bridge.md

Co-authored-by: Erik Moura <[email protected]>

Co-authored-by: Kilian Valkhof <[email protected]>

* Update context-bridge.md

Co-authored-by: Kilian Valkhof <[email protected]>

* Update context-bridge.md

Co-authored-by: Kilian Valkhof <[email protected]>

* Update context-bridge.md

Co-authored-by: Kilian Valkhof <[email protected]>

* Update docs/api/context-bridge.md

Co-authored-by: Erick Zhao <[email protected]>

Co-authored-by: Kilian Valkhof <[email protected]>

* Update docs/api/context-bridge.md

Co-authored-by: David Sanders <[email protected]>

Co-authored-by: Kilian Valkhof <[email protected]>

---------

Co-authored-by: trop[bot] <37223003+trop[bot]@users.noreply.github.com>
Co-authored-by: Kilian Valkhof <[email protected]>
trop[bot] 7 months ago
parent
commit
74fb38964a
1 changed files with 19 additions and 0 deletions
  1. 19 0
      docs/api/context-bridge.md

+ 19 - 0
docs/api/context-bridge.md

@@ -138,6 +138,25 @@ has been included below for completeness:
 
 If the type you care about is not in the above table, it is probably not supported.
 
+### Exposing ipcRenderer
+
+Attempting to send the entire `ipcRenderer` module as an object over the `contextBridge` will result in
+an empty object on the receiving side of the bridge. Sending over `ipcRenderer` in full can let any
+code send any message, which is a security footgun. To interact through `ipcRenderer`, provide a safe wrapper
+like below:
+
+```js
+// Preload (Isolated World)
+contextBridge.exposeInMainWorld('electron', {
+  onMyEventName: (callback) => ipcRenderer.on('MyEventName', (e, ...args) => callback(args))
+})
+```
+
+```js @ts-nocheck
+// Renderer (Main World)
+window.electron.onMyEventName(data => { /* ... */ })
+```
+
 ### Exposing Node Global Symbols
 
 The `contextBridge` can be used by the preload script to give your renderer access to Node APIs.