고객 지원 문의

이메일로 답장드리며, 보통 이틀 안에 회신합니다.

Google reCAPTCHA가 이 제출을 악용 여부에 대해 확인하며, 이 과정에서 데이터가 Google로 전송됩니다. 스크립트는 이 양식을 열 때만 불러옵니다.

← 전체 글

stats2.gif는 실제로 무엇인가

콘텐츠와 검토에 관하여

이 글의 내용

이 프로젝트의 그림 폴더에 stats2.gif이라는 파일이 있습니다. 366바이트이고, 2018년 3월 자이며, 소스 코드에는 정확히 0줄에 나타납니다. 2026년 8월 23일에 그것은 145개의 서로 다른 웹사이트에서 2,735번 200으로 나갔고 — 접근 로그의 전체 회전을 통틀면 858개 사이트에서였습니다.

아무도 참조하지 않는 파일이 하루에 수천 번, 남의 페이지 수백 곳에서 가져가집니다. 뻔한 해석은 이렇습니다. 사람들이 끝내 바꾸지 않은 옛 삽입이, 예전에 카운터가 있던 자리에서 조용히 고정된 그림을 내보내고 있다. 고정 파일은 PHP를 완전히 비켜 갑니다. 아파치에 곧바로 닿는 것은 아무것도 셀 수 없습니다.

그래서 도구를 하나 썼습니다. 로그에서 참조하는 페이지를 모두 읽고, 사이트가 삽입 진단에 이미 쓰고 있는 같은 검사기로 하나하나 가져오며 — 그 주소들은 우리가 아니라 로그에서 온 것이므로 SSRF 방어와 함께입니다 — 그 페이지에서 실제로 무언가가 세고 있는지를 봅니다.

858개 페이지 전부

이미 세고 있음(옆에 작동하는 삽입이 있음)501
아예 닿을 수 없음288
배지는 있으나 소스에 카운터 번호가 없음69
옛 배지만 있고 세는 것은 없음0
이미 세고 있음501닿을 수 없음288아이콘, 번호 없음69우리가 찾던 경우: 0

하나도 없었습니다. 일흔다섯 분 동안 가져왔고, 답은 아니오였습니다.

1초면 되는 측정

stats2.gif은 13 × 14 픽셀입니다.

그것은 카운터도 아니고 숫자가 적힌 배지도 아닙니다. 작은 통계 아이콘입니다 — 지금 갤러리의 디자인 981이 다시 만든 바로 그것이고, 그 디자인의 소스 주석이 조상을 정확히 설명합니다. 보이는 수는 없고, 누르면 통계를 여는 작은 표시일 뿐입니다. 애초에 셀 물건이 아니었습니다. 그 페이지들에서는 늘 다른 무언가가 세고 있었습니다.

파일이 망가진 것도 아닙니다. 2018년의 Last-Modified과 1년짜리 캐시 수명을 달고 200으로 답합니다. 제 일을 합니다.

그저 getimagesize() 한 번이면 그 탐색 전체가 1초에 끝납니다. 여기서 물음은 "이 파일이 왜 이렇게 자주 가져가지는가"였고, 가정한 답은 "망가진 카운터니까"였으며, 그 뒤의 모든 것이 파일이 아니라 가정에 얹혀 있었습니다 — 그래서 1초짜리 확인을 먼저 돌릴 값어치가 있습니다.

정말로 망가진 한 가지

그 모든 것 가운데 로그는 진짜 결함 하나를 보여 주었습니다. 주소 하나가 하루 열 번 요청되고 전부 410인데, 삽입 코드 조각 전체가 그 링크의 href 안에 들어가 있었습니다. 누군가 HTML을 이스케이프하는 칸에 코드를 붙여 넣은 것입니다. 그들의 카운터는 살아서 세고 있고 — 자기 통계로 가는 자기 링크만 아무 데도 이르지 못합니다.

도구는 쓰기 경로 없이 남습니다. 물음은 정당했고, 답은 아니오이며, 아무도 그것을 손으로 다시 묻지 않도록 둘 다 남길 값어치가 있습니다.

광고