Firestore를 이용한 게시판 작성 중인데, 보안관련 이슈 때문에 여기다 질문해본다.


다음은 Doc에서 제시하는 국롤 규칙인데,


rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { // Allow public read access, but only content owners can write match /some_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; } } }


보시다시피, "some_collection" 에서

read 권한은 누구에게나 다 있고,

create 권한은 해당 uid 에게만, update,delete 도 마찬가지로 생성한 문서의 author_uid와 로그인한 uid가 맞으면 수정 및 삭제 가능하게 되어있지.


근데 이러면 보안이 매우 허술하지 않냐? read 권한이 따로 없으므로 누구나 문서를 다 읽을 수 있는데, 클라이언트에서 json으로 저 some_collection의 개별 document를 json 형태로 받아 볼텐데 그 안에 author_uid 필드값이 있자나. author_uid를 알고 있기 때문에, 요청 시 auth.uid를 저 author_uid로 교체하고 request 날리면 결국 모든 문서 조작이 다 가능하다는 말 아님?


노백엔드서버 게시판으로 만들어보려고 하는데, 여기서 어떻게 변환시켜야함? 가장 베스트는 클라이언트가 값을 요청할 때 db에서 특정 필드값(여기서 예를 들면 author_uid)은 빼고 응답해준다던지 하는 방법이 있는데, 찾아봐도 안나온다.


custom claims 라는 제어 rule이 있는데 이건 admin sdk를 써야해서 결국 백엔드가 필요하다는 결론이 나옴. 하지만 나는 지금 노백엔드로 진행중(client <-> firestore 형태로)


아니면 request.auth 에 자체 JWT가 포함되어 있어서(무결성 보장), 위변조를 db rule 앞단에서 다 차단시키나? 그럼 상관없겠지만...