파괴는 창조에 앞선다.
원문: 리로그에서 읽기
해킹은 현재 구현된 시스템 위에서 일어난다.
그리고 보안은 발견된 취약점으로부터 발전한다.
즉, 취약점에 대한 공격은 항상 선행되고 그것에 대한 대응은 뒤따른다.
공격할 수 없는 시스템을 구축하는 것은 불가능하다.
개발자는 공격받을 수 없는 시스템을 만드는 것이 아니라, 공격할 필요가 없는 시스템을 구축해야 한다.

그리고 내게 이유는 충분하다.
리로그 조회수는 언제 올라갈까?
글 상세 화면을 읽는 GET 요청과 조회수를 등록하는 요청은 분리되어 있다.
프론트엔드는 실제 상세 화면에 들어왔을 때 다음 요청을 보낸다.
POST /v1/posts/222/views
백엔드는 로그인한 사람에게는 회원 ID를, 비회원에게는 rilog_visitor 쿠키의 UUID를 방문자 식별자로 사용한다.
비회원에게 쿠키가 없으면 새 UUID를 만들어 쿠키로 내려준다.
같은 글에서 같은 식별자로 다시 들어오면 마지막으로 인정된 조회부터 한 시간 동안 중복으로 처리한다.
작성자가 로그인해서 자기 글을 본 경우에는 조회수를 올리지 않는다.
브라우저가 아니라 쿠키를 보관하지 않는 프로그램이 요청한다면 어떨까?
쿠키 하나가 한 사람은 아니다
curl -i -X POST 'https://api.rilog.kr/v1/posts/222/views' \
-H 'Origin: https://www.rilog.kr' \
-H 'Content-Length: 0'
운영 API는 204 No Content와 새로운 rilog_visitor 쿠키를 반환했다.
새 비회원 식별자를 발급한다는 코드의 동작이 실제 응답에서도 보였다.
curl은 별도의 쿠키 저장소를 지정하지 않으면 응답에서 받은 쿠키를 다음 요청에 자동으로 보내지 않는다. 같은 명령을 다시 실행하면 서버는 또 쿠키가 없는 요청을 받는다.
서버는 다시 새 UUID를 발급하고, 그 UUID에는 이 글을 읽은 기록이 없다.
한 시간을 기다리지 않아도 되는 이유
중복 조회를 판단하는 기준은 IP도, 브라우저도 아니다. 글 ID와 방문자 식별자의 조합이다.
비회원 요청에 rilog_visitor 쿠키가 없으면 서버는 새 UUID를 만든다.
그 UUID로 이 글을 조회한 기록은 없다. 따라서 한 시간 제한을 검사할 때 비교할 이전 시각도 없다.
우회 방법은 발급받은 쿠키를 다음 요청에 보내지 않으면 된다.
from urllib.request import Request, urlopen
url = "https://api.rilog.kr/v1/posts/222/views"
for _ in range(3):
request = Request(url, data=b"", method="POST")
with urlopen(request, timeout=15) as response:
print(response.status, response.headers.get("Set-Cookie"))
요청이 반복될 때 서버의 로직
- 쿠키가 없다.
- 새 UUID를 발급한다.
- 이 UUID로 조회한 기록이 없다.
- 조회를 인정하고, 응답으로 쿠키를 내려준다.
- 클라이언트는 그 쿠키를 보관하지 않는다.
그다음 요청은 다시 1번부터 시작한다.
당신이 이 글을 읽는 순간에도 조회수는 올라가고 있다.
테크 기업 버그 바운티 보상금
| 기업 | 최대 보상금 (USD) | 주요 대상 |
|---|---|---|
| Apple | $5,000,000 초과 | iOS 고급 공격 체인, 특별 보너스 포함 Apple Security Research |
| $1,500,000 | Android·Pixel 보안 칩 공격 Google Bug Hunters | |
| Samsung | $1,000,000 | Galaxy 기기 탈취·권한 우회 |
| Meta | $300,000+ | 모바일 원격 코드 실행(RCE) Facebook |
| Microsoft | $250,000 | Hyper-V 등 핵심 제품 취약점 Microsoft |
| Shopify | $200,000 | 치명적인 플랫폼 취약점 HackerOne |
| OpenAI | $100,000 | ChatGPT 등 제품·인프라 보안 취약점 OpenAI |
| GitHub | $30,000+ | VIP 프로그램 기준, 일반 공개 프로그램 $10,000 |
| 리로그 | ? |
정의의 철퇴


