페이스북 크롤러의 작동 방식
페이스북에 포스팅할때, 웹 사이트 URL을 입력하면 포스팅 완료 이전 이라도,기본 해당 사이트의 정보를 가지고 온다. 이렇게 SNS나, 인스턴트 메신저에서 웹 사이트 정보가 미리 필요한 경우를 대비해 meta 태그상에 정의된 대표 이미지와 사이트 description을 미리 준비해두는 웹사이트도 있지만, 그렇지 않은 경우라면 HTML과 이미지 일부분을 가져와야 하는 경우가 있는데, 이 경우는 일종의 웹 크롤링 이라고도 볼 수 있다.
페이스북이 웹 사이트 정보 수집을 위해 요청하는 HTTP request 메시지상의 요청 헤더는 다음과 같다.
....
Range: bytes=0-524287
X-Fb-Curl-Client: share_scraper
Host: XXXXX
Accept-Encoding: gzip
Connection: close
....
Accept: */*
....
User-Agent: facebookexternalhit/1.1 (+http://www.facebook.com/externalhit_uatext.php)
웹 서버에 해당 콘텐트를 요청한 페이스북 에이젼트의 Source IP를 검색해보면, 이 경우엔 미국 버지니아 애쉬번에 있는 페이스북의 에이전트로 확인된다. 재미있는 점은 저 User-Agent값으로 spoofing한 악성 웹 크롤러들이 꽤 많다는 사실이다.
즉, 검색에 노출되지 않도록 GoogleBot은 막을지 언정, 페이스북에 포스팅되는 것은 마케팅 차원에서라도 풀어주고 있는 사이트 관리자들의 심리를 이용했다고도 볼 수 있다.
(참고로 페이스북은 이미 자사의 개발자 웹 사이트를 통해서 페이스북이 크롤링을 할 때 사용하는 User-Agent와 그 Agent들의 IP CIDR 블럭, 크롤링 방식등을 공개하였다. https://developers.facebook.com/docs/sharing/webmasters/crawler?pnref=story
페이스북 크롤러는 다음과 같이 웹 사이트 관리자가 미리 준비한 메타 데이터를 통해 사이트 정보를 수집한다.
<meta property="og:url" content="https://example.com/path" />
사이트 관리자 입장에서는 단순히 Bot을 User-Agent 값만으로 유입/차단 여부를 결정할것 아니라, 다음과 같은 여러 측면에서의 판단이 필요하다.
다른 서비스에도 공격을 했거나, 하고 있는 악명높은 악성 클라이언트인지 IP 데이터베이스에서 검색(Client Reputation)
익명 네트워크 뒤에 숨어서 공격하고 있는지 (Tor N/W)
CDN이나 리버스 프록시 때문에 특정 IP의 접속율이 높아보이는 것은 아닌지(Proxy)
특정 클라이언트가 단위 시간내 너무 많은 접속을 하고 있는지(Rate control)