Be my desk. _firebase 보안규칙 / 안전하지 않은 규칙 > 해결

박다영·2023년 3월 12일
0

project

목록 보기
70/70

안전하지 않은 규칙 오류 > 해결

파이어베이스 측에서 보안 규칙에서 안전하지 않은 규칙 오류가 떴다.
테스트를 위해서 임시적으로 모든 사용자의 접근을 풀어두었는데,
아무래도 해킹 위험성 등이 높으니 보안 규칙을 더 세세하게 설정해
DB 접근 권한을 제한라는 말이었다.

(파이어베이스 보안규칙은 파이어베이스 데이터베이스의 규칙 탭에서 설정할 수 있다.)

Be my desk 는 비로그인 사용자도 피드의 내용을 확인할 수 있도록 해야 했고,
따로 보안상 민감한 공개 비공개 페이지 등은 존재하지 않았기 때문에
아래와 같이 모든 문서에서 읽기는 가능하되, 쓰기/수정/삭제 는 로그인 한 유저만 사용하도록 했다.

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read: if true
      allow write, update, delete: if request.auth != null
    }
  }
}

firebase 보안 규칙 커스텀

다양한 커스터 마이징이 가능하기 때문에 아래를 참고해서 각 프로젝트에 맞게 설정해보자.

잠금모드 - 모든 읽기 쓰기를 허용하지 않음

service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}

허용모드

  • 모두에게 읽기 쓰기를 허용함
  • 강력한 보안규칙이 아니고, 해킹의 가능성이 있기 때문에
    새로운 프로젝트 생성 및 테스트 단계에서만 사용하는 것을 권장!
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

인증된 사용자에게만 허용모드

  • 인증된 사용자에게만 읽기 쓰기를 허용함
  • 인증된 유저인지를 확인 후 데이터 수정을 허용한다.
    (로그인 사용자를 판별하기 위해 authentification 기능을 사용해야 한다.)
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if request.auth != null;
    }
  }
}

컨텐츠 소유자에게만 허용모드

  • 컨텐츠 소유자에게만 읽기 쓰기를 허용함
  • 해당 컨텐츠의 소유자인지를 확인하고, 소유자에게만 수정 권한을 줌.
    글을 쓴 사람만 그 글을 수정하게 하려면!
service cloud.firestore {
  match /databases/{database}/documents {
    match /"여기에 collection 이름을 넣기"/{userId}/{documents=**} {
      allow read, write: if request.auth != null && request.auth.uid == userId
    }
  }
}

공개 비공개 모드

  • 모든 사용자가 읽을 수 있지만, 쓰고 수정하고 삭제하는 것은 컨텐츠 소유자만 허용!
service cloud.firestore {
  match /databases/{database}/documents {
    match /"여기에 collection 이름을 넣기"/{document} {
      allow read: if true
      allow create: if request.auth.uid == request.resource.data.author_uid;
      allow update, delete: if request.auth.uid == resource.data.author_uid;
    }
  }
}

역할 지정모드

  • 컨텐츠 공동 소유자가 있을 경우 여러명에게 관리 권한 허용!
service cloud.firestore {
  match /databases/{database}/documents {
    allow write: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.admin == true;
    allow read: true;

    match /"여기에 collection 이름을 넣기"/{document} {
     allow read: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "Reader"
     allow write: if get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role == "Writer"
   }
  }
}


참고

firebase 공식 페이지 - 보안 규칙 및 Firebase 인증
[Firebase] 보안 규칙에 대해 간단히 알아보기 - 1

profile
개발과 디자인 두마리 토끼를!

0개의 댓글