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 앞단에서 다 차단시키나? 그럼 상관없겠지만...
자문자답:
https://stackoverflow.com/questions/63279485/how-to-securely-add-authenticated-user-uid-into-firestore-document?rq=1
자문자답추