[web-crawler] ‘스텔스’웹 크롤러 감지

탐지를 원하지 않는 웹 크롤러를 탐지하기 위해 어떤 옵션이 있습니까?

(목록 탐지 기술을 사용하면 스마트 스텔스 크롤러 프로그래머가 더 나은 스파이더를 만들 수 있다는 것을 알고 있지만 어쨌든 스마트 스텔스 크롤러를 차단할 수는 없을 것이라고 생각합니다.

googlebot 및 Yahoo!와 같은 멋진 크롤러에 대해 말하는 것이 아닙니다. 슬러 프. 다음과 같은 경우 봇이 좋다고 생각합니다.

  1. 사용자 에이전트 문자열에서 자신을 봇으로 식별합니다.
  2. robots.txt를 읽고 준수합니다.

나는 나쁜 크롤러 에 대해 이야기하고 있고 , 일반적인 사용자 에이전트 뒤에 숨어 있고, 내 대역폭을 사용하고, 대가로 아무것도주지 않습니다.

업데이트 된 목록을 구성 할 수있는 몇 가지 트랩 도어가 있습니다 (Chris, gs에게 감사합니다) .

  1. robots.txt에 나열된 (허용하지 않음으로 표시) 디렉토리 추가,
  2. 보이지 않는 링크 추가 (아마도 rel = “nofollow”?로 표시됨),
    • style = “디스플레이 : 없음;” 링크 또는 상위 컨테이너
    • Z- 색인이 더 높은 다른 요소 아래에 배치
  3. CaPiTaLiSaTioN을 이해하지 못하는 사람을 감지합니다.
  4. 누가 답글을 게시하려고하지만 항상 보안 문자가 실패하는지 감지합니다.
  5. POST 전용 리소스에 대한 GET 요청 감지
  6. 요청 사이의 간격 감지
  7. 요청 된 페이지 순서 감지
  8. http를 통해 https 리소스를 (일관되게) 요청하는 사람 감지
  9. 이미지 파일을 요청하지 않는 사람 감지 (알려진 이미지 지원 브라우저의 사용자 에이전트 목록과 결합하면 놀랍도록 훌륭하게 작동합니다)

일부 트랩은 ‘좋은’봇과 ‘나쁜’봇 모두에 의해 트리거됩니다. 이를 화이트리스트와 결합 할 수 있습니다.

  1. 함정을 유발합니다.
  2. 요청 robots.txt?
  3. 순종했기 때문에 다른 함정을 유발하지 않습니다. robots.txt

여기에서 또 다른 중요한 사항은 다음과 같습니다.
스크린 리더를 사용하는 시각 장애인을 고려하십시오. 사람들에게 연락 할 수있는 방법을 제공하거나 (이미지가 아닌) 보안 문자를 해결하여 계속 탐색하십시오.

정상적인 인간 방문자로 위장하려는 웹 크롤러를 자동으로 감지하는 방법은 무엇입니까?

업데이트
문제는 아닙니다. 모든 크롤러를 어떻게 잡아야합니까? 문제는 크롤러를 감지 할 가능성을 극대화 할 수있는 방법입니다.

일부 스파이더는 정말 훌륭하고 실제로 html, xhtml, css javascript, VB 스크립트 등을 구문 분석하고 이해합니다
. 나는 환상이 없습니다. 나는 그들을 이길 수 없습니다.

그러나 일부 크롤러가 얼마나 어리석은 지 놀랄 것입니다. 어리 석음의 가장 좋은 예는 (내 의견으로는) 요청하기 전에 모든 URL을 소문자로 변환하는 것입니다.

그리고 다양한 함 정문을 피할 수있는 ‘충분하지 않은’크롤러가 많이 있습니다.



답변

얼마 전에 저는 작은 호스팅 회사와 협력하여 이에 대한 솔루션을 구현하도록 돕습니다. 내가 개발 한 시스템은 주어진 IP 주소에서 과도한 활동이 있는지 웹 서버 로그를 조사하고 위반자를 차단하는 방화벽 규칙을 발행했습니다. 여기에는 http://www.iplists.com/을 기반으로 한 IP 주소 / 범위의 화이트리스트가 포함되어 있으며 요청 된 사용자 에이전트 문자열을 확인하고 클라이언트가 합법적 인 스파이더라고 주장하는 경우 필요에 따라 자동으로 업데이트되었습니다. 화이트리스트에서 DNS / 역 DNS 조회를 수행하여 소스 IP 주소가 봇의 소유권이 주장 된 소유자와 일치하는지 확인했습니다. 안전 장치로서 이러한 조치는 잘못된 평가의 경우 주소를 블랙 / 화이트리스트에 추가하는 링크와 함께 이메일로 관리자에게보고되었습니다.

나는 6 개월 정도 동안 그 고객과 이야기하지 않았지만, 마지막으로 들었을 때 시스템이 상당히 효과적으로 작동하고 있었다.

사이드 포인트 : 적중률 제한을 기반으로 유사한 감지 시스템을 수행하려는 경우 최소 1 분 (가급적 최소 5 분) 합계를 사용해야합니다. 나는 (이미지는 집계에서 제외되지 않는 한) 이미지가 많은 페이지에 오탐 (false positive)을 생성 할 수 있으며, 두 번째에서 5 ~ 10 안타를 꼭대기 블록 누구로 할 계획 이러한 종류의 이야기 많은 사람들이 볼 거짓 생성을 나와 같은 사람이 모든 것을 읽고 싶은 흥미로운 사이트를 발견하면 탭의 모든 링크를 열어서 첫 번째를 읽는 동안 백그라운드에서로드 할 수 있습니다.


답변

Project Honeypot을 참조하세요 . 대규모로 봇 트랩을 설정하고 있으며 IP와 DNSRBL이 있습니다.

까다로운 URL 및 HTML 사용 :

<a href="https://stackoverflow.com//example.com/"> = http://example.com/ on http pages.
<a href="page&amp;&#x23;hash"> = page& + #hash

HTML에서는 주석, CDATA 요소, 엔티티 등으로 많은 트릭을 사용할 수 있습니다.

<a href="foo<!--bar-->"> (comment should not be removed)
<script>var haha = '<a href="bot">'</script>
<script>// <!-- </script> <!--><a href="bot"> <!-->


답변

쉬운 해결책은 링크를 만들어 보이지 않게하는 것입니다.

<a href="iamabot.script" style="display:none;">Don't click me!</a>

물론 소스 코드를 보는 일부 사람들은 그 링크가 어디로 가는지보기 위해 해당 링크를 따라갈 것이라고 예상해야합니다. 하지만 해당 사용자에게 보안 문자를 표시 할 수 있습니다.

물론 유효한 크롤러도 링크를 따라갑니다. 그러나 rel = nofollow를 구현해서는 안되며 유효한 크롤러의 신호를 찾으십시오. (유저 에이전트처럼)


답변

나열하지 않은 한 가지는 일반적으로 불량 크롤러를 감지하는 데 사용됩니다.

히트 속도, 좋은 웹 크롤러는 히트를 쪼개서 요청으로 사이트를 폭주하지 않도록합니다. 나쁜 사람들은 다음 세 가지 중 하나를 수행합니다.

  1. 순차적 링크를 차례로 누르십시오.
  2. 일부 병렬 시퀀스에서 순차 링크를 누르십시오 (한 번에 2 개 이상).
  3. 고정 된 간격으로 순차 링크 히트

또한 일부 오프라인 브라우징 프로그램은 여러 페이지를 표시합니다. IP 주소로 차단을 시작하기 위해 어떤 종류의 임계 값을 사용하고 싶은지 잘 모르겠습니다.

이 방법은 fmirror 또는 wget과 같은 미러링 프로그램도 포착합니다.

봇이 시간 간격을 무작위로 지정하면 링크가 순차 또는 깊이 우선 방식으로 순회되는지 확인하거나 봇이 (읽을 단어와 같이) 대량의 텍스트를 순회하는지 확인할 수 있습니다. 너무 짧은 시간. 일부 사이트는 또한 시간당 요청 수를 제한합니다.

실제로 어딘가에서 아이디어를 들었습니다. 사용자가 킬로바이트 단위로 너무 많은 데이터를 가져 오면 봇이 아님을 증명하라는 보안 문자가 표시 될 수 있다는 생각이 들지 않습니다. 그래도 구현 된 것을 본 적이 없습니다.

링크 숨기기에 대한 업데이트

링크를 숨기는 한, CSS (그리기 순서에서 먼저 배치)를 사용하여 div를 다른 아래에 놓고 z 순서를 설정할 수 있습니다. 봇은 메뉴인지 확인하기 위해 모든 자바 스크립트를 구문 분석하지 않고는이를 무시할 수 없습니다. 어느 정도까지는 보이지 않는 DIV 요소 내부의 링크도 봇이 모든 자바 스크립트를 구문 분석하지 않고는 무시할 수 없습니다.

이 아이디어를 완성하면 숨겨진 요소를 잠재적으로 보여줄 수있는 javascript가 자바 스크립트 구문 분석 봇의 하위 집합을 속일 수 있습니다. 그리고 구현할 작업이 많지 않습니다.


답변

양식에 대해 들어 본 간단한 봇 탐지 방법 중 하나는 숨겨진 입력 기술입니다. 양식을 보호하려는 경우 완전히 합법적으로 보이는 ID로 양식에 입력을 넣으십시오. 그런 다음 외부 파일에서 CSS를 사용하여 숨 깁니다. 또는 편집증이있는 경우 페이지로드시 입력 상자를 숨기도록 jquery와 같은 것을 설정하십시오. 이 작업을 제대로 수행하면 봇이 알아 내기가 매우 어려울 것이라고 생각합니다. 특히 숨겨진 입력에 id = “fname”등과 같은 ID를 제공하는 경우 해당 봇이 페이지의 모든 내용을 채울 수 있다는 것을 알고 있습니다.


답변

좋은 사용자 에이전트 문자열을 따라가는 것은 실제로 쉽지 않습니다. 브라우저 버전은왔다 갔다합니다. 다른 행동으로 사용자 에이전트 문자열에 대한 통계를 작성하면 흥미로운 것을 알 수 있습니다.

이것이 얼마나 자동화 될 수 있는지는 모르겠지만 적어도 하나의 차별화 된 점입니다.


답변

테스트되지 않았지만 정규 표현식을 만들 수있는 사용자 에이전트의 멋진 목록이 있습니다. 대부분의 방법을 찾을 수 있습니다.

ADSARobot|ah-ha|almaden|aktuelles|Anarchie|amzn_assoc|ASPSeek|ASSORT|ATHENS|Atomz|attach|attache|autoemailspider|BackWeb|Bandit|BatchFTP|bdfetch|big.brother|BlackWidow|bmclient|Boston\ Project|BravoBrian\ SpiderEngine\ MarcoPolo|Bot\ mailto:craftbot@yahoo.com|Buddy|Bullseye|bumblebee|capture|CherryPicker|ChinaClaw|CICC|clipping|Collector|Copier|Crescent|Crescent\ Internet\ ToolPak|Custo|cyberalert|DA$|Deweb|diagem|Digger|Digimarc|DIIbot|DISCo|DISCo\ Pump|DISCoFinder|Download\ Demon|Download\ Wonder|Downloader|Drip|DSurf15a|DTS.Agent|EasyDL|eCatch|ecollector|efp@gmx\.net|Email\ Extractor|EirGrabber|email|EmailCollector|EmailSiphon|EmailWolf|Express\ WebPictures|ExtractorPro|EyeNetIE|FavOrg|fastlwspider|Favorites\ Sweeper|Fetch|FEZhead|FileHound|FlashGet\ WebWasher|FlickBot|fluffy|FrontPage|GalaxyBot|Generic|Getleft|GetRight|GetSmart|GetWeb!|GetWebPage|gigabaz|Girafabot|Go\!Zilla|Go!Zilla|Go-Ahead-Got-It|GornKer|gotit|Grabber|GrabNet|Grafula|Green\ Research|grub-client|Harvest|hhjhj@yahoo|hloader|HMView|HomePageSearch|http\ generic|HTTrack|httpdown|httrack|ia_archiver|IBM_Planetwide|Image\ Stripper|Image\ Sucker|imagefetch|IncyWincy|Indy*Library|Indy\ Library|informant|Ingelin|InterGET|Internet\ Ninja|InternetLinkagent|Internet\ Ninja|InternetSeer\.com|Iria|Irvine|JBH*agent|JetCar|JOC|JOC\ Web\ Spider|JustView|KWebGet|Lachesis|larbin|LeechFTP|LexiBot|lftp|libwww|likse|Link|Link*Sleuth|LINKS\ ARoMATIZED|LinkWalker|LWP|lwp-trivial|Mag-Net|Magnet|Mac\ Finder|Mag-Net|Mass\ Downloader|MCspider|Memo|Microsoft.URL|MIDown\ tool|Mirror|Missigua\ Locator|Mister\ PiX|MMMtoCrawl\/UrlDispatcherLLL|^Mozilla$|Mozilla.*Indy|Mozilla.*NEWT|Mozilla*MSIECrawler|MS\ FrontPage*|MSFrontPage|MSIECrawler|MSProxy|multithreaddb|nationaldirectory|Navroad|NearSite|NetAnts|NetCarta|NetMechanic|netprospector|NetResearchServer|NetSpider|Net\ Vampire|NetZIP|NetZip\ Downloader|NetZippy|NEWT|NICErsPRO|Ninja|NPBot|Octopus|Offline\ Explorer|Offline\ Navigator|OpaL|Openfind|OpenTextSiteCrawler|OrangeBot|PageGrabber|Papa\ Foto|PackRat|pavuk|pcBrowser|PersonaPilot|Ping|PingALink|Pockey|Proxy|psbot|PSurf|puf|Pump|PushSite|QRVA|RealDownload|Reaper|Recorder|ReGet|replacer|RepoMonkey|Robozilla|Rover|RPT-HTTPClient|Rsync|Scooter|SearchExpress|searchhippo|searchterms\.it|Second\ Street\ Research|Seeker|Shai|Siphon|sitecheck|sitecheck.internetseer.com|SiteSnagger|SlySearch|SmartDownload|snagger|Snake|SpaceBison|Spegla|SpiderBot|sproose|SqWorm|Stripper|Sucker|SuperBot|SuperHTTP|Surfbot|SurfWalker|Szukacz|tAkeOut|tarspider|Teleport\ Pro|Templeton|TrueRobot|TV33_Mercator|UIowaCrawler|UtilMind|URLSpiderPro|URL_Spider_Pro|Vacuum|vagabondo|vayala|visibilitygap|VoidEYE|vspider|Web\ Downloader|w3mir|Web\ Data\ Extractor|Web\ Image\ Collector|Web\ Sucker|Wweb|WebAuto|WebBandit|web\.by\.mail|Webclipping|webcollage|webcollector|WebCopier|webcraft@bea|webdevil|webdownloader|Webdup|WebEMailExtrac|WebFetch|WebGo\ IS|WebHook|Webinator|WebLeacher|WEBMASTERS|WebMiner|WebMirror|webmole|WebReaper|WebSauger|Website|Website\ eXtractor|Website\ Quester|WebSnake|Webster|WebStripper|websucker|webvac|webwalk|webweasel|WebWhacker|WebZIP|Wget|Whacker|whizbang|WhosTalking|Widow|WISEbot|WWWOFFLE|x-Tractor|^Xaldon\ WebSpider|WUMPUS|Xenu|XGET|Zeus.*Webster|Zeus [NC]

출처 :
http://perishablepress.com/press/2007/10/15/ultimate-htaccess-blacklist-2-compressed-version/