Почему я вижу "предупреждение о безопасности электрона" после обновления моего проекта Electron до последней версии?

Я создал проект Electron-Vuejs-Vuetify из этого шаблона Vuetify

Я вижу это предупреждение в консоли:

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

Вопрос:

Что может быть причиной этого - Node, Vue.js, webpack localhost config? Что я должен делать?

Ответ 2

У вас есть это:

Предупреждение о безопасности электрона. Этот процесс визуализации включает интеграцию Node.js и пытается загрузить удаленный контент. Это предоставляет пользователям этого приложения серьезные риски для безопасности.

Потому что из вторых рекомендаций по безопасности от электронной документации

2) Отключить интеграцию Node.js для удаленного контента

Крайне важно, чтобы вы отключили интеграцию Node.js в любом рендерере (BrowserWindow, BrowserView или WebView), который загружает удаленный контент. Цель состоит в том, чтобы ограничить полномочия, предоставляемые удаленному контенту, что значительно затрудняет атакующему вред вашим пользователям, если они получат возможность выполнять JavaScript на вашем веб-сайте.

После этого вы можете предоставить дополнительные разрешения для определенных хостов. Например, если вы открываете BrowserWindow, указанную на странице " https://my-website.com/ ", вы можете предоставить этому веб-сайту именно те возможности, которые ему нужны, но не более того.

Зачем?

Атака межсайтового скриптинга (XSS) более опасна, если злоумышленник может выпрыгнуть из процесса визуализации и выполнить код на компьютере пользователя. Атаки с межсайтовыми сценариями довольно распространены - и в то время как проблема, их власть обычно ограничивается возиться с веб-сайтом, на котором они выполняются. Отключение интеграции Node.js помогает предотвратить переход XSS в так называемую атаку "Удаленное выполнение кода" (RCE). Как?

// 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>

При отключении интеграции Node.js вы все равно можете выставлять API на свой сайт, которые потребляют модули или функции Node.js. Preload-скрипты по-прежнему имеют доступ к требуемым и другим функциям Node.js, что позволяет разработчикам подвергать пользовательский API удаленно загруженному контенту.

В следующем примере сценария предварительной загрузки более поздний загруженный веб-сайт будет иметь доступ к window.readConfig(), но не имеет функций Node.js.

const { readFileSync } = require('fs')

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

Поэтому вы были предупреждены о том, что вы можете отключить интеграцию Node.js для удаленного контента.

Надеюсь, это поможет ответить на ваш вопрос.

Ответ 3

Электронный контрольный список безопасности упоминает, как обращаться с предупреждением безопасности. В частности, при обслуживании index.html из протокола file: (где вы не можете использовать заголовки HTTP CSP), можно использовать метатег для той же цели, что указано в контрольном списке безопасности здесь: CSP HTTP-заголовок.

Рекомендуется использовать

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

... но я нашел (получил помощь по GitHub здесь), этот будет более практичным, поскольку он позволяет использовать script src:

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

Подробнее о CSP на content-security-policy.com.

Ответ 4

Начиная с версии Electron 2.0 разработчики будут видеть предупреждения и рекомендации, напечатанные на консоли разработчика. Они отображаются только в том случае, когда имя бинарного типа является Electron, что указывает на то, что разработчик в настоящее время смотрит на консоль.

Я предлагаю вам следовать контрольным спискам рекомендаций по безопасности Electron, чтобы избежать этих предупреждений https://github.com/electron/electron/blob/master/docs/tutorial/security.md

Ответ 5

Более новая версия электронного шаблона Vue содержит эти предупреждения, которые ранее были отключены в бета-версии с помощью:

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

Что теперь требует от вас сделать следующее внутри вашего index.js:

process.env.ELECTRON_DISABLE_SECURITY_WARNINGS = '1';

Ответ 6

TL;DR: отключите eval() в настройках вашего BrowserWindow.

Я только что прошел этот процесс на последних электронных, vue и т.д., И решение состоит в том, чтобы отключить eval() который может представлять угрозу безопасности из-за выполнения кода, который не от вас (или вашего приложения).

Добавьте allowEval: false к вашим webPreferences во время создания окна, чтобы предотвратить предупреждение чисто:

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

Некоторая справочная информация: Electron фактически пытается выполнить некоторый код javascript (из строки, использующей require('electron').executeJavaScript) и, в случае успеха, считает ваш код небезопасным.