전자 프로젝트를 최신 버전으로 업데이트한 후 "전자 보안 경고"가 표시되는 이유
나는 이 부에티파이의 보일러 판에서 일렉트로닉 부에즈 부에티파이 프로젝트를 만들었다.
콘솔에서 경고가 표시됨:
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
질문:.
노드, Vue.js, 웹 팩의 localhost 구성의 원인이 될 수 있는 것은?어떻게 해야 하나?
다음 행 추가main.js
:
process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true';
그러나 보안, 기본 기능 및 책임에 대한 내용을 완전히 이해하려면 보안, 기본 기능 및 책임을 읽으십시오.
넌 이걸 가지고 있어:
Electronic Security Warning 이 렌더러 프로세스는 Node.js 통합을 활성화하고 원격 콘텐츠를 로딩하려고 시도한다.이것은 이 앱의 사용자들을 심각한 보안 위험에 노출시킨다.
왜냐하면 전자 설명서의 두 번째 보안 권고 사항으로부터
2) 원격 컨텐츠에 대한 Node.js 통합 사용 안 함
원격 콘텐츠를 로드하는 모든 렌더러(BrowserWindow, BrowserView 또는 WebView)에서 Node.js 통합을 사용하지 않도록 설정하는 것이 가장 중요하다.목표는 원격 콘텐츠에 부여한 권한을 제한하여 공격자가 웹 사이트에서 JavaScript를 실행할 수 있는 능력을 얻을 경우 공격자가 사용자에게 해를 입히는 것을 훨씬 더 어렵게 만드는 것이다.
그런 다음 특정 호스트에 대한 추가 사용 권한을 부여하십시오.예를 들어, 만약 당신이 "https://my-website.com/"을 가리키는 BrowserWindow를 열고 있다면, 당신은 그 웹사이트가 필요로 하는 정확한 능력을 줄 수 있지만, 더 이상은 아니다.
왜?
공격자가 렌더러 프로세스에서 뛰어나와 사용자 컴퓨터에서 코드를 실행할 수 있는 경우 XSS(Cross-Site Scripting) 공격은 더 위험하다.사이트 간 스크립팅 공격은 상당히 일반적이며, 문제가 있기는 하지만, 일반적으로 이러한 공격의 힘은 실행 중인 웹 사이트를 교란하는 것으로 제한된다.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 통합을 비활성화해도 Node.js 모듈 또는 기능을 사용하는 API를 웹 사이트에 노출할 수 있다.사전 로드 스크립트는 요구 사항 및 기타 Node.js 기능에 대한 액세스를 계속하여 개발자가 원격으로 로드된 콘텐츠에 사용자 지정 API를 노출할 수 있도록 한다.
다음 예시 프리로드 스크립트에서 나중에 로드된 웹 사이트는window.readConfig()
방법, 그러나 Node.js 기능은 없다.
const { readFileSync } = require('fs')
window.readConfig = function () {
const data = readFileSync('./config.json')
return data
}
따라서 Node.js Integration for Remote Content를 사용하지 않도록 주의하십시오.
나는 이것이 너의 질문에 대답하는데 도움이 되기를 바란다.
일렉트로닉 보안 체크리스트에는 보안 경고에 대처하는 방법이 언급되어 있다.특히 서빙할 때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';" />
content-security-policy.com의 CSP에 대해 자세히 알아보십시오.
최신 버전의 전자 Vue 템플릿에는 베타에서 이전에 사용하지 않도록 설정되었던 다음과 같은 경고가 있다.
process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true';
이제 당신의 안에서 다음을 해야 한다.index.js
:
process.env.ELECTRON_DISABLE_SECURITY_WARNINGS = '1';
추가하다
process.env['ELECTRON_DISABLE_SECURITY_WARNINGS'] = 'true';
이렇게 하면 오류 메시지가 사라진다.
Electron 2.0부터 개발자들은 개발자 콘솔에 인쇄된 경고와 권장 사항을 보게 될 것이다.이들은 바이너리의 이름이 일렉트로닉일 때에만 나타나 개발자가 현재 콘솔을 보고 있다는 것을 나타낸다.
나는 이러한 경고를 피하기 위해 전자 공식 보안 권장 사항 체크리스트를 따를 것을 제안한다. https://github.com/electron/electron/blob/master/docs/tutorial/security.md
TLDR: BrowserWindow 옵션에서 eval()을 사용하지 않도록 설정하십시오.
방금 최신 전자, vue 등에 대해 이 과정을 거쳤는데 해결책은 비활성화하는 것이다.eval()
사용자(또는 앱)가 아닌 코드를 실행하기 때문에 보안 위험이 될 수 있다.
추가allowEval: false
당신께webPreferences
경고를 깨끗하게 방지하기 위한 창 작성 중:
const win = new electron.BrowserWindow({
webPreferences: {
allowEval: false // This is the key!
}
});
몇 가지 배경 정보: 전자는 실제로 어떤 자바스크립트 코드를 실행하려고 한다.require('electron').executeJavaScript
( ) 및, 성공하면, 당신의 코드가 안전하지 않다고 간주한다.
'Programing' 카테고리의 다른 글
Vue.js에서 이스케이프되지 않은 HTML 표시 (0) | 2022.03.17 |
---|---|
한 항목에 일부 변경 사항이 있을 때 vuex 어레이의 상태를 업데이트하는 중 (0) | 2022.03.17 |
react useContext 를 사용하여 컨텍스트의 데이터를 동일한 구성 요소에서 표시하는 방법 (0) | 2022.03.17 |
이전 AJAX 통화 요청이 해결될 때까지 RxJs를 사용하여 모든 요청을 보류하는 방법 (0) | 2022.03.17 |
Nuxt의 Vuex-module-decorator 구문으로 정의된 Vuex 모듈을 vue-test-utils 및 Jest를 사용하여 테스트하는 방법 (0) | 2022.03.17 |