Mbtigram 개인정보 처리방침에는 "7일 뒤 파기", "알림을 끄면 전송하지 않음"이라고 적혀 있었지만 코드를 하나씩 대 보니 지키지 않는 줄이 네 줄 있어서 수정하는 과정
문서-코드 대조
출시를 앞두고 개인정보 처리방침, 동의서, 청소년 보호 정책을 다시 읽어봤음. 문장마다 이게 실제로 그렇게 동작하나를 코드에서 확인했음.
네 군데가 어긋나 있었음.
1. 7일 뒤 지운다던 기록이 17일째 남아 있었음
탈퇴한 사람이 7일 안에 다시 가입하는 걸 막으려고 번호와 이메일의 지문을 7일 동안 남김 . 처리방침에도 그렇게 적었음.
그런데 이 지문을 지우는 코드는 다른 사람이 탈퇴할 때만 돌았음. 탈퇴가 뜸하면 기간이 지나도 아무도 안 지움. 운영 데이터를 보니 17일 지난 지문이 4건 남아 있었음. 제재 중에 탈퇴한 사람의 지문과, 1년 보관하기로 한 신고·자동 검사 기록은 아예 지우는 곳이 없었음.
파기를 다른 일에 끼워 두지 않고 따로 떼어 냈음. 서버가 켜질 때 한 번, 그 뒤 6시간마다 기간이 지난 기록을 지움. 요청이 하나도 없는 날에도 돎. 1년이 지난 제재는 재가입 때 물려주지 않게도 바꿨음. 보관 기간이 끝난 기록을 근거로 쓰면 안 되기 때문임.
2. 지운 사진 파일이 서버에 남아 있었음
프로필 사진을 바꾸면 화면에는 새 사진이 뜸. 옛 사진은 데이터베이스에서 주소만 지워졌고 파일은 서버 디스크에 그대로 남았음. 탈퇴해도 마찬가지였음.
문제는 업로드 폴더(/media)가 인증 없이 열린다는 점임. 옛 주소를 아는 사람은 지운 사진을 계속 볼 수 있었음.
원본 주소를 아예 안 보내는 이유와 같은 구멍이 반대쪽에 있었던 셈임.
- 사진을 바꾸거나 지울 때, 스토리가 만료되거나 지워질 때: 연결을 끊은 뒤 내 파일이고 다른 곳에서 안 쓰면 파일도 지움.
- 탈퇴할 때: 그 사람이 올린 파일을 전부 지움. 글에 붙은 사진만 남김. 글은 남은 사람의 맥락이라 남기기로 했기 때문임.
3. 알림을 꺼도 알림 서버로 보내고 있었음
처리방침에는 "알림을 끄면 Firebase로 전송되지 않는다"고 적었음. 앱 푸시 알림은 구글의 Firebase를 거쳐 가고, 그때 닉네임과 메시지 앞부분이 함께 감. 그래서 끄는 선택지를 줬음.
그런데 웹 화면은 알림 허용 여부와 상관없이 기기 토큰을 서버에 등록했고, 서버는 그 토큰으로 계속 보냈음. 기기가 알림을 화면에 안 띄웠을 뿐 전송은 일어나고 있었음. 이제 알림이 꺼져 있으면 등록하는 대신 서버에서 토큰을 뗌. 앱 화면을 흉내 낸 헤드리스 크롬으로 켬 → 끔 → 켬을 해 보며 서버의 토큰 수가 1 → 0 → 1로 바뀌는 것까지 확인했음.
4. "게시되기 전에 검사"는 반만 맞았음
청소년 보호 정책에는 모든 글이 게시되기 전에 자동 검사를 거친다고 적혀 있었음. 게시글, 댓글, 스토리, 사진은 맞음. 대화는 다름. 말풍선이 늦게 뜨지 않게 보내는 순간에는 금칙어만 보고, 외부 검사는 전송 직후에 돎. 정책 문서를 그 둘로 나눠 고쳐 적었음. 동의서에도 처리방침에만 있던 국외 이전 항목(알림 내용, 광고 식별자)을 옮겨 적었음.
정리하면 문서 쪽을 기준으로 코드를 고친 게 셋, 코드 쪽을 기준으로 문서를 고친 게 하나였음.