stats2.gif는 실제로 무엇인가
이 글의 내용
이 프로젝트의 그림 폴더에 stats2.gif이라는 파일이 있습니다. 366바이트이고, 2018년 3월 자이며, 소스 코드에는 정확히 0줄에 나타납니다. 2026년 8월 23일에 그것은 145개의 서로 다른 웹사이트에서 2,735번 200으로 나갔고 — 접근 로그의 전체 회전을 통틀면 858개 사이트에서였습니다.
아무도 참조하지 않는 파일이 하루에 수천 번, 남의 페이지 수백 곳에서 가져가집니다. 뻔한 해석은 이렇습니다. 사람들이 끝내 바꾸지 않은 옛 삽입이, 예전에 카운터가 있던 자리에서 조용히 고정된 그림을 내보내고 있다. 고정 파일은 PHP를 완전히 비켜 갑니다. 아파치에 곧바로 닿는 것은 아무것도 셀 수 없습니다.
그래서 도구를 하나 썼습니다. 로그에서 참조하는 페이지를 모두 읽고, 사이트가 삽입 진단에 이미 쓰고 있는 같은 검사기로 하나하나 가져오며 — 그 주소들은 우리가 아니라 로그에서 온 것이므로 SSRF 방어와 함께입니다 — 그 페이지에서 실제로 무언가가 세고 있는지를 봅니다.
858개 페이지 전부
| 이미 세고 있음(옆에 작동하는 삽입이 있음) | 501 |
| 아예 닿을 수 없음 | 288 |
| 배지는 있으나 소스에 카운터 번호가 없음 | 69 |
| 옛 배지만 있고 세는 것은 없음 | 0 |
하나도 없었습니다. 일흔다섯 분 동안 가져왔고, 답은 아니오였습니다.
1초면 되는 측정
stats2.gif은 13 × 14 픽셀입니다.
그것은 카운터도 아니고 숫자가 적힌 배지도 아닙니다. 작은 통계 아이콘입니다 — 지금 갤러리의 디자인 981이 다시 만든 바로 그것이고, 그 디자인의 소스 주석이 조상을 정확히 설명합니다. 보이는 수는 없고, 누르면 통계를 여는 작은 표시일 뿐입니다. 애초에 셀 물건이 아니었습니다. 그 페이지들에서는 늘 다른 무언가가 세고 있었습니다.
파일이 망가진 것도 아닙니다. 2018년의 Last-Modified과 1년짜리 캐시 수명을 달고 200으로 답합니다. 제 일을 합니다.
그저 getimagesize() 한 번이면 그 탐색 전체가 1초에 끝납니다. 여기서 물음은 "이 파일이 왜 이렇게 자주 가져가지는가"였고, 가정한 답은 "망가진 카운터니까"였으며, 그 뒤의 모든 것이 파일이 아니라 가정에 얹혀 있었습니다 — 그래서 1초짜리 확인을 먼저 돌릴 값어치가 있습니다.
정말로 망가진 한 가지
그 모든 것 가운데 로그는 진짜 결함 하나를 보여 주었습니다. 주소 하나가 하루 열 번 요청되고 전부 410인데, 삽입 코드 조각 전체가 그 링크의 href 안에 들어가 있었습니다. 누군가 HTML을 이스케이프하는 칸에 코드를 붙여 넣은 것입니다. 그들의 카운터는 살아서 세고 있고 — 자기 통계로 가는 자기 링크만 아무 데도 이르지 못합니다.
도구는 쓰기 경로 없이 남습니다. 물음은 정당했고, 답은 아니오이며, 아무도 그것을 손으로 다시 묻지 않도록 둘 다 남길 값어치가 있습니다.