it-swarm.com.de

Warum wird nach der Aktualisierung meines Electron-Projekts auf die neueste Version eine "Elektronensicherheitswarnung" angezeigt?

Ich habe das Electron-Vuejs-Vuetify-Projekt aus dieser Vuetify-Heizplatte

Ich sehe diese Warnung in der Konsole:

Electron Security Warning 
This renderer process has Node.js integration enabled and 
attempted to load remote content. This exposes users of this app to severe security risks.

For more information and help, consult https://electronjs.org/docs/tutorial/security

Frage:

Was kann das bewirken - Node, Vue.js, localhost config des Webpacks? Was soll ich machen?

12
Un1

Du hast das hier:

Elektronensicherheitswarnung Für diesen Renderer-Prozess ist die Integration von Node.js aktiviert und versuchte, Remote-Inhalte zu laden. Dadurch werden Benutzer dieser App erheblichen Sicherheitsrisiken ausgesetzt.

Denn ab der 2. Sicherheitsempfehlung aus Elektron Dokumentation

2) Deaktivieren Sie die Node.js-Integration für Remote-Inhalte

Es ist äußerst wichtig, dass Sie die Node.js-Integration in einem beliebigen Renderer (BrowserWindow, BrowserView oder WebView) deaktivieren, der Remote-Inhalt lädt. Das Ziel besteht darin, die von Ihnen eingeräumten Befugnisse auf Remote-Inhalte zu beschränken. Dadurch wird es einem Angreifer erheblich erschwert, den Benutzern zu schaden, wenn er die Möglichkeit hat, JavaScript auf Ihrer Website auszuführen.

Danach können Sie zusätzliche Berechtigungen für bestimmte Hosts vergeben. Wenn Sie beispielsweise ein BrowserWindow öffnen, das auf " https://my-website.com/ " verweist, können Sie dieser Website genau die Fähigkeiten geben, die sie benötigt, jedoch nicht mehr.

Warum?

Ein Cross-Site-Scripting-Angriff (XSS) ist gefährlicher, wenn ein Angreifer den Renderer-Prozess verlassen und Code auf dem Computer des Benutzers ausführen kann. Cross-Site-Scripting-Angriffe sind recht häufig - und obwohl sie ein Problem sind, beschränkt sie sich in der Regel darauf, mit der Website zu tun, auf der sie ausgeführt werden. Durch die Deaktivierung der Node.js-Integration wird verhindert, dass ein XSS in einen sogenannten "Remote Code Execution" (RCE) -Angriff (Escape-Code) umgewandelt wird.

// Bad
const mainWindow = new BrowserWindow()
mainWindow.loadURL('https://my-website.com')

// Good
const mainWindow = new BrowserWindow({
  webPreferences: {
    nodeIntegration: false,
    preload: './preload.js'
  }
})

mainWindow.loadURL('https://my-website.com')

<!-- Bad -->
<webview nodeIntegration src="page.html"></webview>

<!-- Good -->
<webview src="page.html"></webview>

Wenn Sie die Node.js-Integration deaktivieren, können Sie Ihrer Website immer noch APIs bereitstellen, die Node.js-Module oder -Funktionen verwenden. Preload-Skripts haben weiterhin Zugriff auf die erforderlichen und andere Node.js-Funktionen, sodass Entwickler eine benutzerdefinierte API für remote geladenen Inhalt verfügbar machen können.

Im folgenden Beispiel-Vorladeskript hat die später geladene Website Zugriff auf eine window.readConfig()-Methode, jedoch keine Node.js-Funktionen.

const { readFileSync } = require('fs')

window.readConfig = function () {
  const data = readFileSync('./config.json')
  return data
}

Daher wurden Sie gewarnt, sodass Sie Deaktivieren der Node.js-Integration für Remote-Inhalte können.

Ich hoffe, das hilft bei der Beantwortung Ihrer Frage. 

11
antzshrek

Fügen Sie die folgende Zeile zu main.js hinzu:

process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true';

Sie sollten jedoch Sicherheit, native Funktionen und Ihre Verantwortung .__ lesen. um die Auswirkungen dieses Vorgehens vollständig zu verstehen.

8
netlander

Die Electron Sicherheitscheckliste beschreibt den Umgang mit der Sicherheitswarnung. Insbesondere wenn index.html Über das file: - Protokoll bereitgestellt wird (wo Sie keine HTTP-CSP-Header verwenden können), kann das Meta-Tag für denselben Zweck verwendet werden, wie in der Sicherheitscheckliste dokumentiert hier: CSP-HTTP-Header .

Es empfiehlt sich zu verwenden

<meta http-equiv="Content-Security-Policy" content="default-src 'none'" />

… Aber ich habe festgestellt (habe Hilfe auf GitHub bekommen hier ), dass dies praktischer ist, da es einem erlaubt, script src Zu verwenden:

<meta http-equiv="Content-Security-Policy" content="script-src 'self';" />

Mehr zu CSP unter content-security-policy.com .

2

TLDR: Deaktivieren Sie eval () in Ihren BrowserWindow-Optionen.

Ich habe gerade diesen Prozess auf dem neuesten Elektron durchlaufen, vue usw.) und die Lösung ist, eval() zu deaktivieren, was ein Sicherheitsrisiko darstellen kann, da Code ausgeführt wird, der nicht ausgeführt wird von dir (oder deiner App).

Fügen Sie während der Fenstererstellung allowEval: false Zu Ihrem webPreferences hinzu, um die Warnung sauber zu verhindern:

const win = new electron.BrowserWindow({
    webPreferences: {
        allowEval: false // This is the key!
    }
});

Einige Hintergrundinformationen: electron versucht tatsächlich, JavaScript-Code auszuführen (aus einem String mit require('electron').executeJavaScript). Wenn dies erfolgreich ist, wird Ihr Code als unsicher eingestuft.

1
Marc

Ab Electron 2.0 werden den Entwicklern Warnungen und Empfehlungen auf der Entwicklerkonsole angezeigt. Sie werden nur angezeigt, wenn der Name der Binärdatei Electron lautet, was darauf hinweist, dass ein Entwickler gerade auf die Konsole schaut.

Ich empfehle Ihnen, die Checkliste der offiziellen Sicherheitsempfehlungen von Electron zu befolgen, um diese Warnungen zu vermeiden https://github.com/electron/electron/blob/master/docs/tutorial/security.md

1
JerryGoyal

Die neuere Version der Vue-Vorlage für Elektronen weist diesewarningsauf, die zuvor in der Beta deaktiviert wurden.

process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true';

Dazu müssen Sie jetzt in Ihrem index.js Folgendes tun:

process.env.ELECTRON_DISABLE_SECURITY_WARNINGS = '1';
0
li x