Security | Electron

💡 Electron 앱의 보안 문제에 대해 개인적인 이해도를 높이고자 혼자 공부하며 관리하고 있는 문서입니다.

읽어본 결과, 대부분 디폴트로 보안 문제에 대해 틀어막고 있고, 주의할 만하거나 참고할 만한 부분들은 제목에 ⭐️을 달아뒀습니다.

Preface

브라우저의 강력한 보안성에 익숙한 우리는, Electron 앱을 만들 때에도 비슷한 보안성을 기대한다. 하지만, Electron은 웹 브라우저가 아니기 때문에, 브라우저 위보다 훨씬 강력한 힘을 가진다. 자바스크립트는 당신의 파일 시스템 및 쉘에 접근할 수 있다. 따라서, 신뢰할 수 없는 소스에서 온 임의의 컨텐츠를 보여주는 것에 각별히 주의하라. 대다수의 Electron 앱들(Atom, Slack, VSCode 등)은 일반적으로 로컬 컨텐츠들을 보여준다.

General Guidelines

신뢰할 수 없는 소스로부터 코드를 다운받고 이를 실행할 때, 보안 이슈가 발생한다. 웹사이트를 보여주고 싶으 ㄹ땐, BrowserWindow 모듈을 사용해라.

Node.js 코드를 실행할 땐, 앱에 같이 패키징된 로컬 파일들만을 사용해라. nodeIntegration을 중지하고, contextIsolation을 사용해라. (Default로 설정되어 있음.)

체크리스트: 보안에 대한 몇 가지 추천 사항

💡 Electronegativity라는 오픈 소스 툴로, misconfigurations와 insecure 패턴들을 자동화할 수 있다.

1. Only load secure content(e.g. HTTPS)

앱에 포함되어 있지 않은 어떠한 리소스든, HTTPS와 같은 보안 프로토콜을 이용해 로드되어야 한다. HTTP 쓰지 마셈! HTTPS는 데이터 무결성을 보장하고, 트래픽을 암호화한다.

2. Do not enable Node.js integration for remote content

💡 5.0.0 이후로 Default

렌더러 프로세스에서 원격 컨텐츠를 로딩할 때, Node.js integration 세팅을 비활성화해야 한다.

Cross-site-scripting(XSS) 공격은, 공격자가 렌더러 프로세스를 건너뛰고 사용자의 컴퓨터에서 직접 코드를 실행할 때 훨씬 위험하다.