Repository navigation
fix: 공유 일정과 공개 프로필의 읽기 범위를 실제 관계로 좁힌다 (174) - #175
Merged
Merged
Conversation
「로그인했는가」 는 범위가 아니었다. Google 계정은 몇 초 만에 새로 만들 수 있어, 로그인만 조건으로 둔 컬렉션은 사실상 공개였다. - publicProfiles 는 get 만 열고 list 를 막는다. 목록이 열려 있으면 문서 이름을 몰라도 컬렉션을 통째로 훑을 수 있어 「아는 사람만 본다」 가 성립하지 않았다. - 공유 코드를 공개 프로필에서 빼고, 코드를 문서 이름으로 삼는 등록부(shareCodes)로 옮긴다. 중복 확인이 만들기 한 번으로 끝나 확인과 저장 사이의 틈도 함께 사라진다. - 공유 일정의 읽기와 완료 변경을 그 코드의 감시자로 등록한 사람으로 좁힌다. 읽기보다 이쪽이 더 아프다 — 남이 완료로 바꿔 두면 어르신이 약을 이미 먹은 줄로 안다. - getUserNames 를 목록 질의에서 문서별 읽기로 바꾼다. - 감시자 등록이 이제 읽기 권한의 근거라, FCM 토큰을 못 받아도 등록은 되게 한다. 등록에 실패한 코드는 저장하지 않고 화면에 이유를 남긴다. 앞 코드도 그대로 둔다. - 코드가 저장됐는데 등록만 실패한 채 남은 기기를 위해, 공유 일정을 구독하기 전에 등록을 다시 세운다. 규칙 테스트에 제3자 계정을 넣어 읽기·완료 변경이 모두 막히는 것과, 공유 일정이 많아도 목록 조회가 규칙의 문서 접근 한도에 걸리지 않는 것을 실제 건수로 잠갔다. 비공개 보안 권고 GHSA-5473-2vph-69w6.
Contributor
|
❌ Screenshot test fail — baseline 과 CI rendered PNG 차이. 📦 Artifact: https://github.com/1hyok/SlowClock/actions/runs/34017573854 (페이지 하단 Artifacts → 🔍 확인 위치 (artifact zip 내부):
📝 조치 가이드:
CI ↔ 로컬 환경 차이는 본 워크플로의 container 단계가 root fix 한다 (docs/testing/screenshot.md 참조). |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
📌𝘐𝘴𝘴𝘶𝘦𝘴
📎𝘞𝘰𝘳𝘬 𝘋𝘦𝘴𝘤𝘳𝘪𝘱𝘵𝘪𝘰𝘯
💬𝘛𝘰 𝘙𝘦𝘷𝘪𝘦𝘸𝘦𝘳𝘴
무엇을 고쳤나
「로그인했는가」 는 범위가 아니다. Google 계정은 몇 초 만에 새로 만들 수 있어, 로그인만 조건으로 둔 컬렉션은 사실상 공개다.
publicProfiles읽기get)만. 목록(list)은 아무도 못 함publicProfiles필드id·name·shareCodeid·namepublicProfiles목록 질의shareCodes/{code}만들기 한 번sharedCode가 비어 있지 않으면 누구나getUserNameswhereIn목록 질의읽기보다 쓰기가 더 아프다. 남이 완료 표시를 뒤집을 수 있으면 어르신이 약을 이미 먹은 줄로 안다.
끊어질 뻔한 자리를 함께 손봤다
감시자 등록 문서가 이제 읽기 권한의 근거다. 그래서:
merge로 써서 앞서 저장한 토큰을 지우지 않는다). 토큰이 없으면 알림만 못 받는데, 등록을 거르면 가족 일정이 통째로 안 보인다.확인
firestore-tests34건 통과(에뮬레이터). 새로 잠근 것:completed·completedDates를 바꾸지 못한다sharedCode > ""로 다른 집 일정까지 훑지 못한다publicProfiles목록 조회가 막힌다단위 테스트 121건 · 정책 테스트 249건 · lint · ktlint 통과.
배포 순서
규칙은 저장소 파일을 고치는 것만으로 적용되지 않는다. 머지로 새 테스터 빌드가 나간 뒤
firebase deploy --only firestore:rules를 돌린다. 옛 빌드는 공유 일정 읽기는 그대로 되지만(감시자 문서가 이미 있다) 소유자 이름이 비고, 새로 가입하면 공유 코드를 못 만든다.비공개 보안 권고 GHSA-5473-2vph-69w6.