본문 바로가기
C.W.K.
Stream
Lesson 06 of 06 · published

Isolation 패턴 & 원격 콘텐츠 신뢰

~14 min · tauri, isolation, remote, security

Level 0웹 관광객
0 XP0/56 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete
"Tauri에서 할 수 있는 제일 위험한 짓은, 권한을 쥔 창을 남의 웹사이트로 돌려놓는 거야."

원격 콘텐츠는 그 창의 권한을 그대로 물려받아

창은 보통 함께 실은 프론트엔드를 불러 — 네가 짜고 믿는 코드지. 창을 바깥 URL(WebviewUrl::External)로 돌려놓는 순간부터는 네가 통제 못 하는 코드를 돌리는 거고, Tauri는 기본적으로 그걸 의심하고 대해. 위험은 창에 capability를 줘놓고 동시에 원격 콘텐츠를 불러오게 두는 데서 터져. 그러면 그 원격 페이지(나 거기 주입된 뭐든)가 네 네이티브 command를 부를 수 있게 되거든. 'capability를 가진 창'이랑 '원격 콘텐츠를 보여주는 창'은 절대 겹치면 안 되는 조합이라고 생각해. 원격 콘텐츠를 꼭 불러야 하면 그 창엔 capability를 최소로, 되도록 0으로 줘.

capability의 remote 컨텍스트

capability는 origin을 알아봐. 자기 permission을 쓸 수 있는 바깥 URL을 적어두는 remote 컨텍스트를 지정할 수 있거든. 기본적으로 네가 준 권한은 로컬 앱 콘텐츠에만 걸리지 아무 원격 origin에나 걸리지 않아. 믿는 원격 origin이 command를 쓰게 해야 할 진짜 이유가 있으면, 대놓고 열어줘 — 그것도 와일드카드가 아니라 정확히 그 origin 하나로 좁혀서. 기본값(로컬만)이 안전한 쪽이고, 넓히는 건 의식하고 내리는 결정이어야 해.

Isolation 패턴: 한 겹 더

보증 수준이 높아야 하는 앱을 위해 Tauri는 isolation 패턴을 준비해뒀어. 네 프론트엔드랑 코어 사이에 앉아서, IPC 메시지가 Rust에 닿기 전에 전부 들여다보는 작고 독립된 샌드박스 앱이야. 여기서 메시지를 검사하거나 걸러낼 수 있어 — 메인 프론트엔드가 뚫려도 마지막으로 한 번 더 거르는 검문소인 셈이지. config에서 보안 패턴을 isolation으로 설정하고 그 디렉터리를 지정하면 켜져. 모든 앱에 필요하진 않은 추가 세팅이지만, 민감한 데이터를 다루는 앱한텐 의미 있는 한 겹이야.

Code

isolation 패턴 켜기·json
// tauri.conf.json — isolation 패턴 opt-in (심층 방어).
// Tauri가 이 디렉터리에서 IPC를 가로채는 샌드박스 앱을 주입해.
{
  "app": {
    "security": {
      "pattern": { "use": "isolation", "options": { "dir": "../isolation-dist" } }
    }
  }
}
원격 origin을 URL 하나로 정확히 좁히기·json
// 신뢰하는 원격 origin '하나'가 좁은 permission을 쓰게 하는 capability.
// 기본은 로컬 전용; 이건 명시적, scope된 opt-in — 절대 "*" 아님.
{
  "identifier": "trusted-remote",
  "windows": ["embed"],
  "remote": { "urls": ["https://trusted.example.com"] },
  "permissions": ["core:event:default"]
}

External links

Exercise

상황 하나를 따져봐. 앱이 서드파티 웹 페이지를 안에 띄워야 해. 적어봐. (1) 그 창이 가져야 할 capability(힌트: 가능한 한 적게), (2) 메인 창의 capability를 거기 재사용하면 안 되는 이유, (3) isolation 패턴을 더할 만한 이유 하나. 원격 콘텐츠가 원격 침해로 바뀌지 않게 막는 판단을 연습하는 거야.
Hint
띄우는 창은 이상적으론 네이티브 permission이 0이어야 해 — 못 믿는 콘텐츠니까. 메인 창 capability를 재사용하는 건 서드파티한테 네 네이티브 권한을 넘겨주는 거고. isolation은 뭔가 빠져나가더라도 IPC를 한 번 더 걸러낼 검문소를 더해줘.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.