업무 브라우저에서는 웹페이지 옆에 탭·프로젝트·파일을 다루는 앱 버튼이 함께 보인다. 같은 창에 있다고 같은 실행 권한까지 주면 페이지가 앱의 관리 기능으로 이어질 수 있다. 북극성은 웹 뷰와 Shell의 연결을 다르게 두고 관리 요청을 받는 쪽에서도 보낸 위치를 확인했다.

웹 뷰에는 앱 관리 preload를 붙이지 않는다

웹 문서를 만드는 create는 nodeIntegration을 끄고 contextIsolation·sandbox·webSecurity를 켠다. 현재 webPreferences에는 Shell 관리 preload를 넣지 않는다. 페이지의 DOM과 스크립트가 앱의 파일·프로젝트 버튼과 같은 API를 받는 구조로 만들지 않은 것이다.

세션의 권한 요청과 장치 권한도 현재 코드에서 기본 거절한다. 하지만 이 설정만으로 모든 웹 콘텐츠의 모든 부작용을 인증했다고 말하지 않는다. 페이지는 여전히 자기 문서를 실행하고 네트워크를 사용할 수 있다. 기능 분리의 근거를 실제 설정에 연결하되 범위를 전체 운영체제 보호로 넓히지 않았다.

Shell도 Node 전체를 직접 받지 않는다

ShellView에는 전용 preload를 붙이지만 nodeIntegration은 끄고 격리를 유지한다. preload는 contextBridge를 통해 고정된 메서드를 내보낸다. 임의 channel 문자열과 args를 받아 무엇이든 ipcRenderer.invoke하는 전달기를 페이지에 공개하는 형태가 아니다.

내부에 channel을 묶는 작은 call 함수가 있어도 바깥에는 copyWorkspace나 chooseTaskFiles 같은 정해진 메서드로 연결한다. 메서드 목록이 있다는 사실만으로 그 기능이 언제나 허용되지는 않는다. 현재 작업공간과 프로필, 실행 중 상태는 메인 쪽 계약에서 더 확인한다. 연결 형태와 실제 실행 조건을 나눠 읽었다.

메인 프로세스는 보낸 창과 frame을 다시 확인한다

trusted 검사는 event.sender가 Shell의 webContents인지와 senderFrame이 mainFrame인지, 주소가 Shell scheme 범위인지 함께 본다. 비슷한 화면 제목이나 호출 메서드 이름만으로 관리 요청을 인정하지 않는다. shell:getState 같은 읽기 입구도 이 검사를 거친다.

명령 인자는 ShellCommands의 스키마로 parse한다. 예전 내장 CLI 관련 retired 명령은 등록 루프에서 건너뛴다. 오래된 타입이나 기록 호환용 필드가 남았다는 이유로 실제 IPC가 열려 있다고 설명하지 않는다. 웹 문서의 화면과 앱이 신뢰하는 최상위 관리 frame을 구분해야 하는 이유가 호출 위치에 드러난다.

관리 화면이 다른 페이지로 바뀌는 것도 막는다

ShellView의 will-navigate는 이동을 막고 새 창 요청도 deny한다. 관리 권한이 있는 표면이 다른 웹 문서로 바뀐 뒤 같은 연결을 이어 쓰는 흐름을 피하기 위한 조건이다. 웹 탭의 일반 탐색과 앱 Shell의 이동 금지는 다른 정책이며 같은 창에 있어도 목적이 다르다.

source 경계 검사도 renderer가 Electron·persistence·driver 같은 구현을 직접 import하는지, contracts가 구현 계층에 의존하는지 살핀다. 이는 일부 소스 의존성을 정규식으로 검사하는 도구다. 모든 런타임 취약점과 모든 우회 경로를 증명하는 보안 인증은 아니다. 구조 규칙과 실제 sender 검사는 서로 보완한다.

같은 PC에서 실행하는 프로그램의 권한과는 다르다

이 설명은 웹 뷰와 앱 표면의 경계다. 사용자가 허용한 Python·Jupyter 프로그램이나 바깥 Codex의 파일 작업까지 모두 악성 코드 샌드박스로 격리했다는 뜻은 아니다. 신뢰한 프로그램 실행은 별도 요청과 환경의 책임을 가진다. 웹 모드의 작은 API를 전체 PC의 제한으로 잘못 소개하지 않는다.

이번에는 설정·preload·메인 검사와 정적 경계 검사 코드를 읽었고 원래 브라우저를 새로 띄우거나 테스트 공격을 수행하지 않았다. 재사용할 기준은 화면 배치보다 권한 입구를 나누고, 메서드 이름뿐 아니라 현재 보낸 frame과 실제 인자를 확인하는 것이다. 익숙한 한 창 안에서도 각 책임을 분명하게 남겼다.