이 서비스의 핵심 가치는 목적지를 짧게 감추는 것입니다. 그 성질이 그대로 남용의 도구가 됩니다.
사용자가 판단할 수 없다
짧은 링크를 받은 사람은 목적지를 알 수 없습니다. 눌러서 알게 되는데 그때는 이미 도착했습니다.
긴 주소라면 사용자가 스스로 판단합니다. 단축 링크는 그 판단 기회를 없애는 것이고, 그래서 판단을 우리가 대신해야 합니다.
세 시점에서 검사한다
| 시점 | 하는 일 |
|---|---|
| 만들 때 | 알려진 위험 목록과 대조한다 |
| 신고를 받을 때 | 사용자와 외부 신고로 알게 된다 |
| 만든 뒤에도 | 이미 만든 링크를 다시 검사한다 |
만들 때만 검사하면 부족합니다. 정상 사이트를 등록해 두고 나중에 그 사이트의 내용을 바꾸는 방식이 있습니다. 목적지 주소는 그대로인데 내용이 달라지므로 우리 기록으로는 알 수 없습니다.
그래서 만든 뒤에도 주기적으로 다시 봅니다. 누적 300억 개 을 모두 볼 수는 없으므로 조회가 많은 것부터 봅니다. 피해 규모가 조회 수에 비례하기 때문입니다.
도메인이 차단되면 전부 죽는다
우리 도메인 하나가 모든 링크를 대표합니다. 그 도메인이 위험한 것으로 분류되면 정상 링크까지 함께 막힙니다.
| 대응 | 내용 |
|---|---|
| 신고 경로를 눈에 띄게 둔다 | 우리가 먼저 알고 지운다 |
| 대응 속도를 지표로 관리한다 | 신고에서 차단까지의 시간 |
| 브랜드별로 도메인을 나눈다 | 한 곳이 막혀도 나머지가 산다 |
이 위험이 단축 서비스의 가장 큰 사업 위험입니다. 기술적으로 완벽해도 도메인이 막히면 서비스가 멈춥니다.
키를 훑어 보는 시도
키가 7자이므로 무작위로 넣어 맞히는 것은 어렵습니다. 3조 5천억 중에서 300억이 쓰였으므로 100번에 한 번 미만입니다.
그래도 대량으로 시도하면 남의 링크를 찾을 수 있습니다. 그래서 요청량을 제한합니다. 앞의 처리율 제한 설계가 그것입니다.
그리고 링크에 비밀이 담기지 않게 안내합니다. 단축 링크는 누구에게 전달돼도 동작하는 값입니다. 접근 제어가 필요한 자료에는 맞지 않습니다.
번호 변환을 고르지 않은 이유가 여기서 이어진다
앞에서 무작위를 고른 이유가 추측 가능성이었습니다. 번호 변환이면 다음 키를 알 수 있어 훑어 보기가 거의 확실히 성공합니다.
이 요구사항에서는 링크에 접근 제한이 없지만, 사용자가 사적인 자료를 공유하는 것을 막을 수 없습니다. 감출 수 있으면 감춰 두는 것이 이 경우의 판단입니다.