【진짜 무서운 Firestore】가바가바 보안 규칙의 Firestore에서 데이터를 쉽게 추출하는 방법

소개



Firestore는 백엔드 코드를 작성하지 않고도 DB를 쉽게 처리할 수 있습니다.
백엔드 개발이 되지 않은 초보자뿐만 아니라 프로토타입을 빠르게 작성하고 싶은 사람에게도 매치하는 기술입니다.
하지만 클라이언트에서 직접 DB를 만질 수 있는 편의상 사용자가 악의적인 쿼리를 두드릴 수 있다는 것을 알아야 합니다.

대상자


  • Firestore를 사용하고 있지만 보안 규칙을 모르는 사람
  • 다음의 보안 룰을 봐도, 위험성을 모르는 사람


  • 이 기사에서는 위의 보안 규칙이 설정된 웹 앱에서 쉽게 데이터를 추출할 수 있음을 설명하여 보안 규칙을 작성하는 것의 중요성을 전달하는 것이 목적입니다.

    절차



    필요한 것은 브라우저뿐입니다. 이 기사에서는 Chrome을 사용한다고 가정합니다.

    로그인



    보안 규칙을 보면 알 수 있듯이 로그인하지 않으면 모든 쿼리가 연주됩니다. 우선. 서비스에 로그인합시다.

    SDK 로드



    dev 도구를 엽니다. Console 에서 다음 명령 중 firebaseSDK를 로드합니다.
    > const script = document.createElement('script')
    > script.src="https://www.gstatic.com/firebasejs/8.2.1/firebase.js"
    > document.head.append(script)
    

    버전 부분( 8.2.1 )은 적절히 변경하십시오. 현재 (2021/01/06)의 최신 버전은 8.2.1입니다.

    firebaseConfig 빼기



    dev 도구의 Sources 탭에서 main 파일 같은 js를 선택하고 apiKey 에서 검색하면 firebaseConfig가 제거됩니다. {"apiKey": "***", "authDomain": "***", ...} 가 되어 있는 부분이 firebaseConfig입니다.

    SDK 초기화



    그런 다음 뽑은 firebaseConfig를 사용하여 firebase sdk를 초기화합시다. dev 도구의 Console 탭에서 다음 명령을 치십시오.
    firebase.initializeApp(/** 抜き取ったfirebaseConfig */)
    

    자, 준비가 됐어요.



    자유롭게 쿼리를 두드릴 수 있습니다.
    > const snap = await firebase.firestore().collection('users').get()
    > snap.docs.map(doc => doc.data())
    

    이제 사용자 컬렉션의 모든 데이터를 볼 수 있습니다. DB의 모든 데이터를 열람, 재기록, 삭제하는 것도 가능합니다.

    대책 방법



    firebase config를 비공개로 만드는 것은 현재 무리입니다. 즉, firestore의 보안 규칙을 제대로 쓸 수밖에 없습니다.
    혹은, firestore의 보안 룰을 프런트로부터는 액세스 할 수 없게 해, functions로부터만 액세스 할 수 있도록 하는 것도 생각할 수 있습니다 (단, 그 경우는 콜드 스타트라고 하는 퍼포먼스 문제가 발생해, 대책이 필요하게 됩니다. 합니다).

    결론



    보안 규칙을 제대로 쓰자.
    이 기사를 읽고 차가운 땀을 흘린 사람은 먼저 공식 문서를 읽으십시오. 추천 문서는 다음과 같습니다.
    - Cloud Firestore 보안 규칙 조건 작성

    좋은 웹페이지 즐겨찾기