계정 찾기
손님이 비밀번호를 잊었을 때 다시 들어오게 해 주는 길이에요. 정문보다 여기가 약하면 도둑은 비밀번호를 풀 이유가 없어요. 이 길로 그냥 들어와요.
쉽게 말하면
가게에 문이 두 개 있어요. 정문은 손님이 열쇠로 여는 문이고, 계정 찾기는 열쇠를 잃어버린 손님을 위해 열어 둔 뒷문이에요. 사장님은 정문 자물쇠에만 돈을 써요. 도둑은 정문을 보지도 않아요. 뒷문이 있는데 왜 열쇠를 따겠어요. 그래서 자물쇠 값은 두 문 중 약한 쪽이 정해요.
비밀번호를 아무리 길고 어렵게 만들어도, 되찾는 길이 헐거우면 그 규칙은 값을 못 해요. 비밀번호 규칙 정하기와 이 문서는 한 쌍이에요.
손님은 편해요. 그런데 원래 비밀번호를 보낼 수 있다는 건 그 값을 그대로 갖고 있다는 뜻이에요. 메일함 하나만 뚫리면 계정이 통째로 넘어가요.
손이 한 번 더 가요. 대신 링크가 새도 시간이 지나면 쓸모가 없고, 이미 들어와 있던 침입자도 그 자리에서 같이 끊겨요.
손님이 잃어버리는 것은 하나가 아니에요
"비밀번호를 잊었어요"는 여러 상황이 한 문장으로 들어오는 거예요. 상황마다 열어 줘야 하는 길이 달라요. 다섯 가지를 미리 갈라 두면 문의가 왔을 때 헤매지 않아요.
| 손님이 잃어버린 것 | 열어 줘야 하는 길 | 여기서 벌어지는 사고 |
|---|---|---|
| 비밀번호만 잊음 | 가입한 메일로 재설정 링크를 보내요. 가장 흔하고 가장 안전한 경우예요 | 링크에 만료가 없으면 몇 달 뒤 그 메일을 본 사람이 그대로 들어와요 |
| 가입할 때 쓴 메일 주소를 잊음 | 이름이나 전화번호로 "가입된 계정이 있는지"만 알려 줘요. 주소 전체를 보여 주지 않아요 | 메일 주소를 통째로 보여 주면, 남의 계정 주소를 알아내는 도구가 돼요 |
| 메일함 자체를 못 씀 | 다른 확인 수단으로 넘겨요. 문자 인증이나 미리 등록해 둔 예비 연락처예요 | 여기가 제일 무른 곳이에요. 확인 수단이 약하면 이 통로가 정문이 돼요 |
| 2단계 인증 기기를 잃어버림 | 가입 때 준 예비 코드로 풀어요. 그것도 없으면 사람이 확인하는 절차로 가요 | "폰을 바꿨어요" 한마디로 풀어 주면 2단계 인증을 켠 의미가 사라져요 |
| 소셜 로그인으로 가입한 걸 잊음 | 재설정이 아니라 "카카오로 가입하셨어요"라고 알려 줘요 | 비밀번호를 새로 만들게 해 주면 한 사람에게 계정이 두 개 생겨요 |
세 번째 줄이 진짜 문이에요
메일함을 못 쓰는 손님에게 열어 주는 그 우회로가, 공격자가 노리는 바로 그 길이에요. 정문 자물쇠를 세 개 달아도 여기가 "이름과 생년월일만 맞으면 통과"면 전체 잠금 수준은 그 한 줄로 정해져요.
안전한 되찾기의 순서
만드는 사람이 개발자든 AI든, 순서는 같아요. 여섯 걸음이고 사장님이 확인해야 할 건 각 걸음의 결과가 아니라 그 걸음이 있는지 없는지예요.
- 1요청을 받아요. 손님이 메일 주소를 넣어요. 이때 화면은 주소가 있든 없든 똑같은 문구를 보여 줘요. 다르게 보이면 그 화면이 가입자 명단 조회기가 돼요.
- 2한 번짜리 링크를 만들어요. 아무도 못 맞히는 긴 값이어야 하고, 손님 메일 주소나 가입 날짜에서 계산되는 값이면 안 돼요.
- 3보내고 시간을 걸어요. 짧게 잡아요. 하루를 넘기지 않는 게 보통이에요. 오래 살아 있는 링크는 잊힌 열쇠가 돼요.
- 4들어오면 그 링크를 그 자리에서 죽여요. 한 번 쓴 링크가 두 번 통하면, 손님 뒤를 따라 들어오는 사람이 생겨요.
- 5새 비밀번호를 손님이 직접 넣어요. 서비스가 만들어 보내 주지 않아요. 저장은 비밀번호 해싱 방식으로 해요.
- 6바꾸는 순간 다른 기기 로그인을 전부 끊어요. 이미 들어와 있던 침입자를 밀어내는 유일한 걸음이에요. 그리고 손님에게 "비밀번호가 바뀌었어요" 알림을 보내요.
여섯 번째가 제일 많이 빠져요
재설정은 되는데 옛 로그인이 살아 있는 서비스가 정말 많아요. 그러면 손님이 비밀번호를 바꿔도 침입자는 계속 접속한 상태예요. 세션과 쿠키를 만들 때 "비밀번호가 바뀌면 전부 무효"를 같이 정해 두면 돼요.
여기서 나는 사고
| 보이는 증상 | 실제로 벌어진 일 | 지금 할 일 |
|---|---|---|
| "메일이 안 왔어요" 문의가 몰려요 | 메일이 스팸함에 들어가고 있어요. 되찾기 메일은 특히 잘 걸러져요 | 메일 발송과 도달률에서 발신 도메인 인증을 먼저 봐요 |
| 재설정 요청 메일이 한 손님에게 수십 통 | 요청 횟수를 안 막았어요. 남의 주소를 넣어 괴롭히는 데 쓰이고 있어요 | 같은 주소·같은 접속처의 요청 횟수를 제한해요. 스팸과 어뷰징 대응과 같은 장치예요 |
| 손님이 "내가 안 했는데 비밀번호가 바뀌었대요" | 누군가 되찾기를 실행했어요. 메일함이 뚫렸거나 링크가 샜어요 | 그 계정의 로그인을 전부 끊고, 최근 접속 기록과 주문 내역을 같이 봐요 |
| 탈퇴한 직원이 아직 관리자 화면에 들어와요 | 계정은 지웠는데 되찾기 통로에 남은 예비 연락처가 살아 있었어요 | 예비 연락처와 권한을 같이 회수해요. 딱 필요한 만큼만 권한 순서를 따라요 |
| 손님 계정에 남의 주문이 섞여 있어요 | 본인 확인이 느슨해서 다른 사람이 그 계정을 열었어요 | 그 계정 하나가 아니라 되찾기 절차 전체를 봐야 해요. 같은 방법이 이미 여러 번 쓰였을 수 있어요 |
장면 1 · 문의 창구에 들어온 글
“폰을 새로 바꿔서 인증 문자를 못 받아요. 주문한 이름이랑 전화번호 불러 드릴 테니 그냥 풀어 주시면 안 될까요.”
이 요청 자체는 아주 정상이에요. 진짜 손님도 이렇게 말해요. 위험한 건 답하는 쪽에 정해진 절차가 없다는 것이에요. 이름과 전화번호는 주문서를 한 번 본 사람이면 아는 값이라, 그것만으로 열어 주면 확인을 안 한 것과 같아요. 미리 정해 두세요. 무엇을 물을지, 몇 개가 맞아야 통과인지, 그리고 누가 그 결정을 하는지예요.
손님에게 보이는 문구
되찾기 화면의 문구는 친절함과 보안이 정면으로 부딪히는 자리예요. 친절하게 쓰면 대개 정보가 새요. 자주 쓰는 네 문장을 고쳐 볼게요.
| 상황 | 이렇게 쓰면 새요 | 이렇게 써요 |
|---|---|---|
| 없는 주소를 넣었을 때 | "가입되지 않은 메일입니다" | "가입된 계정이면 메일을 보냈어요. 몇 분 안에 안 오면 스팸함을 봐 주세요" |
| 링크가 만료됐을 때 | "만료된 링크입니다" 만 띄우고 끝 | "이 링크는 시간이 지나 못 써요. 다시 요청하면 새 링크를 보내 드려요" 와 요청 버튼 |
| 새 비밀번호를 정할 때 | "영문 대소문자·숫자·특수문자를 섞으세요" | "길게 쓰는 게 가장 안전해요. 다른 곳에서 쓰던 것과 다르게 해 주세요" |
| 재설정이 끝났을 때 | "완료되었습니다" 한 줄 | "바뀌었어요. 다른 기기에서는 다시 로그인해야 해요. 본인이 한 게 아니면 바로 알려 주세요" |
확인해 보세요
쇼핑몰 되찾기 화면에서 손님이 가입 안 된 메일 주소를 넣었어요. 화면에 무엇을 보여 줄까요?
AI에게 그대로 보낼 문장
직접 만드는 중이면 아래 문장을 그대로 옮기면 돼요. 전문어를 몰라도 돼요. 무엇을 지키고 싶은지만 말하면 나머지는 만드는 쪽이 알아서 해요.
| 내가 원하는 것 | 그대로 보낼 문장 |
|---|---|
| 되찾기 자체를 붙이고 싶어요 | "비밀번호 재설정을 붙여 주세요. 원래 비밀번호를 보내지 말고, 한 번만 쓸 수 있고 짧게 만료되는 링크로 해 주세요." |
| 가입자 명단이 새는 게 걱정돼요 | "가입된 주소든 아니든 화면에 같은 안내가 뜨게 해 주세요." |
| 괴롭힘 요청을 막고 싶어요 | "같은 주소로 짧은 시간에 여러 번 요청하면 더 못 보내게 막아 주세요." |
| 바꾼 뒤가 걱정돼요 | "비밀번호를 바꾸면 다른 기기의 로그인이 전부 풀리게 해 주세요. 그리고 손님에게 변경 알림 메일을 보내 주세요." |
| 문의 창구로 오는 경우도 정하고 싶어요 | "사람이 손으로 풀어 주는 경우에 무엇을 확인해야 하는지 목록으로 만들어 주세요. 그 확인 기록도 남게 해 주세요." |
직접 해보기
마지막 줄부터 붙여 보세요
다섯 줄 중 하나만 고른다면 마지막 줄이에요. 사람이 손으로 열어 주는 통로가 가장 자주 뚫리는데, 대부분 그 통로에 적어 둔 절차가 없어서예요. 스튜디오에서 만들고 있는 것이 있으면 그 자리에 그대로 붙여 보세요.
스튜디오에서 적어 보기자주 묻는 것
- Q. 임시 비밀번호를 문자로 보내 주는 방식은 안 되나요?
- 쓸 수는 있지만 조건이 붙어요. 그 임시 값으로 들어온 다음 화면에서 반드시 새 비밀번호를 정하게 해야 하고, 임시 값도 짧게 만료돼야 해요. 그냥 임시 값 그대로 계속 쓰게 두면, 문자 한 통을 본 사람이 계정을 계속 쓰는 상태가 돼요.
- Q. "어릴 때 살던 동네는?" 같은 질문을 확인 수단으로 써도 될까요?
- 권하지 않아요. 답이 대개 사회 관계망에 이미 적혀 있거나 아는 사람이면 맞힐 수 있어요. 게다가 손님 본인이 몇 달 뒤에 자기 답을 잊어요. 확인이 한 겹 더 필요하면 2단계 인증이나 예비 코드 쪽이 나아요.
- Q. 메일 주소를 바꿔 달라는 요청은 어떻게 처리하나요?
- 가장 조심할 요청이에요. 이걸 통과시키면 계정 주인이 통째로 바뀌어요. 새 주소로만 확인하지 말고 원래 주소로도 알림을 보내서 본인이 아니면 되돌릴 시간을 줘요. 바꾼 직후 얼마 동안은 되찾기 통로를 잠가 두는 것도 흔한 방식이에요.
- Q. 관리자인 제 계정도 같은 방식으로 두면 되나요?
- 아니요. 관리자 계정은 되찾기 통로를 더 좁게 두세요. 관리자 화면은 뚫리면 손님 정보 전체가 걸리니까요. 권한과 역할에서 관리자와 손님 계정을 나누는 이야기를 같이 보세요.
- Q. 손님이 되찾기를 자꾸 못 해서 문의가 늘어요. 어떻게 줄이죠?
- 대부분 메일 도달 문제예요. 스팸함 안내 한 줄을 화면과 메일 제목에 넣는 것만으로 문의가 눈에 띄게 줄어요. 그다음은 가입할 때 소셜 로그인을 함께 쓰게 하는 거예요. 잊을 비밀번호가 아예 없으면 되찾을 일도 줄어요.
- Q. 기록은 어디까지 남겨야 하나요?
- 언제 요청이 들어왔고 언제 성공했는지, 어떤 접속처였는지 정도는 남겨요. 새 비밀번호 값 자체는 절대 남기지 않아요. 관리자가 손으로 풀어 준 건은 따로 표시해 두세요. 누가 무엇을 했나 기록에서 남길 것과 남기면 안 될 것을 갈라 놨어요.
더 깊이 (안 읽어도 괜찮아요)
링크는 왜 한 번만 통해야 하나 · 재설정 링크는 그 순간만큼은 비밀번호와 똑같은 힘을 가진 값이에요. 그런데 링크는 비밀번호와 달리 여러 곳에 자국이 남아요. 메일함에 남고, 손님이 화면을 캡처해 문의에 첨부하기도 하고, 공용 컴퓨터 주소창 기록에도 남아요. 한 번 쓰면 죽게 만들면 그 자국들이 전부 쓸모없는 종이가 돼요. 이게 만료 시간보다 더 중요한 장치예요.
되찾기가 2단계 인증을 무력화하는 경로 · 2단계 인증을 켠 계정이 뚫리는 대표 경로가 되찾기예요. 되찾기로 비밀번호를 바꿀 때 2단계 확인을 건너뛰게 만들어 두면, 공격자는 메일함만 잡으면 되니까 두 번째 잠금이 없는 것과 같아져요. 그래서 되찾기 뒤에도 두 번째 확인을 그대로 요구하거나, 최소한 예비 코드를 요구하는 쪽으로 만들어요. 편의를 위해 이 한 줄을 빼는 순간 잠금 하나가 통째로 사라져요.
사람이 손으로 열어 주는 통로의 값 · 규모가 커지면 자동 되찾기로 안 풀리는 손님이 반드시 생겨요. 그래서 사람이 확인하고 열어 주는 통로를 아예 없앨 수는 없어요. 대신 이렇게 다뤄요. 확인 항목을 미리 문서로 정하고, 그 결정을 할 수 있는 사람을 좁히고, 열어 준 건은 전부 기록으로 남겨요. 이 셋이 없으면 그 통로는 절차가 아니라 그날 담당자의 기분이에요. 손님 응대와 불만의 답변 틀에 이 항목을 같이 넣어 두면 실제로 지켜져요.
이것만 기억하세요
- ·잠금 수준은 정문과 뒷문 중 약한 쪽이 정해요. 비밀번호 규칙만 조이는 건 절반이에요
- ·원래 비밀번호를 보내 주지 않아요. 한 번 쓰면 죽고 짧게 만료되는 링크로 해요
- ·가입된 주소든 아니든 화면 문구는 같아야 해요. 다르면 그 화면이 명단 조회기가 돼요
- ·비밀번호를 바꾸는 순간 다른 기기 로그인을 전부 끊어요. 여기가 가장 많이 빠져요
- ·사람이 손으로 열어 주는 통로는 확인 항목·결정권자·기록 셋을 미리 정해 둬요