2025년 11월 29일 토요일

실험9 일반적인 게시물 - 크롤링 재실험... - 차단 성공

 

 드디어 archive.is 놈들의 파훼법을 알아냈다...

일단 놈들은 자기들 크롤러의 IP 주소가 밝혀지는 걸 싫어하는 것 같다. 어차피 서버 쪽 로그에선 드러날텐데...
자바스크립트를 통해 Cloudflare (pages.dev) 나 Ipify의 IP 추출 API를 호출하게 되면, 지들이 차단을 하는건지 IP 값을 공백으로 가져오게 된다. (값이 공백으로 들어오는 이유는, 오류가 뜰 시 공백 값으로 return 되게 하는 코드를 넣었기 때문이다.)
또한 UserAgent는 크롤링된 페이지에선 mozilla/5.0 (linux; android 5.0; sm-g920a) applewebkit (khtml, like gecko) chrome mobile safari (compatible;adsbot-google-mobile; +http://www.google.com/mobile/adsbot.html) 이라는 값을 보여주긴 하지만, 이 값은 보여주기 식으로 조작된 값이다. 따라서 에이전트 내의 문자열을 가지고 차단을 시도하려 해도 소용없다.
리퍼러 값 또한 공백으로 들어오기 때문에 소용없다.

그렇다면 현재 남은 유일한 방법은 무엇일까?
바로 archive.is가 자기 IP가 따이는 걸 싫어한다는 점을 역이용하는 것이다.
먼저 CloudFlare (pages.dev) 를 통한 IP 조회를 시도할 때, 실패할 경우(오류) 값을 공백으로 처리하도록 한다.
그리고 값이 공백인 경우 Ipify로 2차 IP 조회를 시도한다. 만약 거기서도 실패해서 공백이라면? 그러면 비정상적인 크롤링으로 간주하고 화면을 강제로 닫는 코드를 삽입한다.

            if (ip_detect === ''){
              //여전히 공백일 경우 비정상적인 접근으로 간주하고 차단.
                   document.body.innerHTML = '';
                  document.title = '';
                  window.open('about:blank', '_self').close();
                  window.location.replace('about:blank');
                  return;
            }

이런 식으로 4종 세트를 기입해주면 된다. 
그러면 archive.is에겐 화면의 내용이 모두 지워지는 코드가 발동하기 때문에, 내용이 사라진 채로 크롤링이 이루어진다. 한번 URL에 크롤링이 이루어지면 다시 하지 않는다는 걸 이용한 수법이다.
가끔은 계속 크롤링을 시도하다가 Not Found (yet?) 이라는 문구를 띄우면서 중단될 수도 있다. 
그러면 archive.is와의 싸움에서 승리한 것이다. 축하한다...
 
이 방법을 쓸때 구글 검색엔진 봇에 악영향을 미치지 않을지 우려되었는데...
구글봇은 IP 조회 시도때도 자기 IP를 숨기지 않는다고 Gemini가 말했으니, 이 방식을 취해도 상관없을 것이다...
애초에 정상적인 경우라면 두 사이트의 IP 조회를 거부할 이유가 없다... 무슨 host 차단까지 하지 않는 이상...

오케이. 그럼 이제 이 글로 마지막 실험을 해보자...


댓글 없음:

댓글 쓰기