Add will-attach-webview advice to security.md
This commit is contained in:
parent
fd782706b2
commit
27a4522d65
2 changed files with 20 additions and 4 deletions
|
@ -15,10 +15,6 @@ between your app and embedded content will be asynchronous. This keeps your app
|
||||||
safe from the embedded content. **Note:** Most methods called on the
|
safe from the embedded content. **Note:** Most methods called on the
|
||||||
webview from the host page require a syncronous call to the main process.
|
webview from the host page require a syncronous call to the main process.
|
||||||
|
|
||||||
For security purposes, `webview` can only be used in `BrowserWindow`s that have
|
|
||||||
`nodeIntegration` enabled. You can override this security restiction using
|
|
||||||
`overrideWebViewSecurity` option on [browser-window](browser-window.md).
|
|
||||||
|
|
||||||
## Example
|
## Example
|
||||||
|
|
||||||
To embed a web page in your app, add the `webview` tag to your app's embedder
|
To embed a web page in your app, add the `webview` tag to your app's embedder
|
||||||
|
|
|
@ -77,6 +77,26 @@ This is not bulletproof, but at the least, you should attempt the following:
|
||||||
* WebViews: Do not use `disablewebsecurity`
|
* WebViews: Do not use `disablewebsecurity`
|
||||||
* WebViews: Do not use `allowpopups`
|
* WebViews: Do not use `allowpopups`
|
||||||
* WebViews: Do not use `insertCSS` or `executeJavaScript` with remote CSS/JS.
|
* WebViews: Do not use `insertCSS` or `executeJavaScript` with remote CSS/JS.
|
||||||
|
* WebViews: Verify the options and params of all `<webview>` tags before they
|
||||||
|
get attached using the `will-attach-webview` event:
|
||||||
|
|
||||||
|
```js
|
||||||
|
app.on('web-contents-created', (event, contents) => {
|
||||||
|
contents.on('will-attach-webview', (event, webPreferences, params) => {
|
||||||
|
// Strip away preload scripts if unused or verify their location is legitimate
|
||||||
|
delete webPreferences.preload
|
||||||
|
delete webPreferences.preloadURL
|
||||||
|
|
||||||
|
// Disable node integration
|
||||||
|
webPreferences.nodeIntegration = false
|
||||||
|
|
||||||
|
// Verify URL being loaded
|
||||||
|
if (!params.src.startsWith('https://yourapp.com/')) {
|
||||||
|
event.preventDefault()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
})
|
||||||
|
```
|
||||||
|
|
||||||
Again, this list merely minimizes the risk, it does not remove it. If your goal
|
Again, this list merely minimizes the risk, it does not remove it. If your goal
|
||||||
is to display a website, a browser will be a more secure option.
|
is to display a website, a browser will be a more secure option.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue