【진짜 무서운 Firestore】가바가바 보안 규칙의 Firestore에서 데이터를 쉽게 추출하는 방법
소개
Firestore는 백엔드 코드를 작성하지 않고도 DB를 쉽게 처리할 수 있습니다.
백엔드 개발이 되지 않은 초보자뿐만 아니라 프로토타입을 빠르게 작성하고 싶은 사람에게도 매치하는 기술입니다.
하지만 클라이언트에서 직접 DB를 만질 수 있는 편의상 사용자가 악의적인 쿼리를 두드릴 수 있다는 것을 알아야 합니다.
대상자
이 기사에서는 위의 보안 규칙이 설정된 웹 앱에서 쉽게 데이터를 추출할 수 있음을 설명하여 보안 규칙을 작성하는 것의 중요성을 전달하는 것이 목적입니다.
절차
필요한 것은 브라우저뿐입니다. 이 기사에서는 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 보안 규칙 조건 작성
Reference
이 문제에 관하여(【진짜 무서운 Firestore】가바가바 보안 규칙의 Firestore에서 데이터를 쉽게 추출하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kiyoshiro/items/c43858aff6f398177c1c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
> const script = document.createElement('script')
> script.src="https://www.gstatic.com/firebasejs/8.2.1/firebase.js"
> document.head.append(script)
firebase.initializeApp(/** 抜き取ったfirebaseConfig */)
> const snap = await firebase.firestore().collection('users').get()
> snap.docs.map(doc => doc.data())
firebase config를 비공개로 만드는 것은 현재 무리입니다. 즉, firestore의 보안 규칙을 제대로 쓸 수밖에 없습니다.
혹은, firestore의 보안 룰을 프런트로부터는 액세스 할 수 없게 해, functions로부터만 액세스 할 수 있도록 하는 것도 생각할 수 있습니다 (단, 그 경우는 콜드 스타트라고 하는 퍼포먼스 문제가 발생해, 대책이 필요하게 됩니다. 합니다).
결론
보안 규칙을 제대로 쓰자.
이 기사를 읽고 차가운 땀을 흘린 사람은 먼저 공식 문서를 읽으십시오. 추천 문서는 다음과 같습니다.
- Cloud Firestore 보안 규칙 조건 작성
Reference
이 문제에 관하여(【진짜 무서운 Firestore】가바가바 보안 규칙의 Firestore에서 데이터를 쉽게 추출하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kiyoshiro/items/c43858aff6f398177c1c
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(【진짜 무서운 Firestore】가바가바 보안 규칙의 Firestore에서 데이터를 쉽게 추출하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kiyoshiro/items/c43858aff6f398177c1c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)