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

Scopes: 파일시스템 & 네트워크에 울타리 치기

~14 min · tauri, scopes, filesystem, security

Level 0웹 관광객
0 XP0/56 lessons0/13 achievements
0/100 XP to next level100 XP to go0% complete
"permission은 문을 열어줘. scope는 들어온 사람이 집 안 어디까지 들어갈 수 있는지를 정하고."

permission만으론 왜 부족한가

fs:allow-read-text-file을 허락한다는 건 '이 앱은 텍스트 파일을 읽을 수 있다'는 말이야 — 근데 어떤 파일? scope가 없으면 사용자 디스크 전체를 뜻할 수도 있어. scope가 permission을 특정 경로(파일시스템)나 특정 URL(네트워크)로 좁혀줘. '파일을 읽을 수 있다'랑 '앱 자기 데이터 폴더 안 파일을 읽을 수 있다'의 차이야. 디스크나 네트워크를 만지는 것이라면, 진짜 안전은 scope에 살아.

변수를 쓰는 경로 scope

파일시스템 scope는 경로 패턴을 쓰고, Tauri가 변수를 줘서 절대 경로를 박아 넣지 않아도 돼. $APPDATA, $APPCONFIG, $HOME, $RESOURCE 같은 것들. permission을 allow(원하면 deny까지) 경로 패턴을 가진 객체로 적어. $APPDATA/** 같은 glob은 '앱 데이터 디렉터리 아래 전부'를 뜻하고. 민감한 하위 폴더에 deny를 같이 걸면, 앱이 만져야 할 영역에만 딱 울타리를 친 거야.

최소 권한을 설정으로 굳히기

scope가 최소 권한을 구호에서 설정으로 바꾸는 방법이야. 기능이 $APPDATA에만 쓰는데 $HOME/**을 열어주지 마. API 호스트 하나만 부르는데 https://**를 허용하지 마. 범위를 넓히는 와일드카드 하나하나가 뚫린 프론트엔드가 파고들 공격면이야. 기능이 돌아갈 제일 좁은 scope가 언제나 정답이고 — 어쩔 수 없이 넓게 열어야 할 땐 deny 패턴으로 정확한 구멍을 뚫으면 돼.

Code

파일시스템을 앱 자기 데이터 디렉터리 안에 가두기·json
// capability 안 scope된 fs permission: 앱 데이터 디렉터리 안에서만
// 읽기/쓰기, 그리고 'secrets' 하위 폴더는 명시적으로 절대 안 됨.
{
  "identifier": "main-caps",
  "windows": ["main"],
  "permissions": [
    "core:default",
    {
      "identifier": "fs:allow-read-text-file",
      "allow": [{ "path": "$APPDATA/**" }],
      "deny":  [{ "path": "$APPDATA/secrets/**" }]
    },
    {
      "identifier": "fs:allow-write-text-file",
      "allow": [{ "path": "$APPDATA/**" }]
    }
  ]
}

External links

Exercise

앱의 fs permission 하나를 $APPDATA/**로 좁히고 $APPDATA/secrets/**엔 명시적으로 deny를 걸어. 허용된 자리의 파일을 읽는 command(되는 쪽)랑 secrets/ 안을 읽는 command(막히는 쪽)를 각각 만들어봐. deny가 이기는지 확인해. OS 혼자선 못 주는 정밀함으로 파일시스템에 울타리를 친 거야.
Hint
permission을 객체 형태로 쓰고 allow/deny에 경로 배열을 줘. $APPDATA는 (네 identifier로 이름 붙은) 앱 데이터 디렉터리로 풀려. 부모가 허용돼 있어도 secrets/ 읽기는 실패해야 해 — deny가 allow를 이기는 것과 scope가 같이 맞물려 도는 거야.

Progress

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

댓글 0

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

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