샌드박싱이란?
샌드박싱은 프로세스가 제한된 환경에서 실행되도록 하여, CPU와 메모리 같은 기본 자원은 사용 가능하되 파일 시스템이나 네트워크 같은 민감한 리소스에 대한 접근을 차단하는 보안 기법입니다. Electron은 Chromium의 샌드박스 모델을 계승하며, 특히 렌더러 프로세스를 샌드박스 내에서 실행해 보안을 강화합니다. Electron 20부터 렌더러 프로세스는 기본적으로 샌드박스 환경에서 동작하며, 이는 Node.js API에 대한 직접 접근을 차단해 보안 위협을 줄입니다.
Electron 샌드박싱의 동작 방식
렌더러 프로세스
샌드박스가 적용된 렌더러는 Chromium의 웹 렌더러와 유사하게 작동합니다.
- Node.js 차단: 샌드박스 환경에서는 Node.js 런타임이 초기화되지 않아, fs나 child_process같은 모듈을 사용할 수 없습니다.
- IPC 의존: 메인 프로세스와의 통신은 ipcRenderer를 통해 이루어지며, Preload 스크립트가 중간 다리 역할을 합니다.
Preload 스크립트
Preload 스크립트는 샌드박스 렌더러보다 높은 권한을 가지며, 제한된 Node.js API를 제공합니다.
- require 사용 가능: CommonJS 모듈을 로드할 수 있지만, 번들러를 사용하는 것이 권장됩니다.
- 보안 브리지: contextBridge를 통해 렌더러에 필요한 API만 안전하게 노출합니다.
샌드박싱 설정 및 비활성화 방법
특정 프로세스에서 샌드박스 비활성화
특정 상황에서는 렌더러 프로세스의 샌드박스를 비활성화 할 수 있습니다.
// 샌드박스를 비활성화한 BrowserWindow 예제
const { app, BrowserWindow } = require('electron');
app.whenReady().then(() => {
const win = new BrowserWindow({
width: 1024,
height: 768,
webPreferences: {
sandbox: false // 샌드박스 비활성화
}
});
win.loadURL('https://example.com');
});
Node.js 통합 활성화 시 샌드박스 자동 비활성화
렌더러에서 Node.js 기능을 직접 사용하려면 nodeIntegration 옵션을 활성화하는데, 이 경우에도 샌드박스는 자동으로 비활성화됩니다.
// nodeIntegration을 활성화하면 샌드박스가 사용되지 않습니다.
app.whenReady().then(() => {
const win = new BrowserWindow({
width: 1024,
height: 768,
webPreferences: {
nodeIntegration: true // 노드 통합 활성화
}
});
win.loadURL('https://example.com');
});
모든 렌더러에 대해 샌드박스 강제 활성화
반대로, 모든 렌더러 프로세스에서 샌드박스를 사용하고 싶다면, 앱 초기화 전에 app.enableSandbox()를 호출할 수 있습니다.
// 앱 실행 전에 샌드박스를 전역 활성화
const { app, BrowserWindow } = require('electron');
app.enableSandbox();
app.whenReady().then(() => {
const win = new BrowserWindow({
width: 1024,
height: 768,
// sandbox 옵션은 무시되고 전역 설정이 적용됨
webPreferences: {
sandbox: true
}
});
win.loadURL('https://example.com');
});
'Electron' 카테고리의 다른 글
[Electron] 성능 최적화: 리소스 효율성과 반응성을 높이는 전략 (0) | 2025.04.07 |
---|---|
[Electron] MessagePorts: 메시지 채널을 통한 프로세스 간 직접 통신 (0) | 2025.03.24 |
[Electron] IPC: 프로세스 간 통신으로 앱 기능 확장하기 (0) | 2025.03.24 |
[Electron] 컨텍스트 격리(Context Isolation): 보안과 TypeScript로 더 안전하게 (0) | 2025.03.24 |
[Electron] 프로세스 모델: 메인과 렌더러의 조화로운 협력 (0) | 2025.03.24 |