'스텔스'웹 크롤러 감지


107

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

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

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을 소문자로 변환하는 것입니다.

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

답변:


15

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

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

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


5
웹 크롤러 차단으로 인한 오탐은 웹 트래픽을 절대적으로 죽입니다. 당신은 기본적으로 설명 된이 순진한 방법을 쉽게 우회 할 수있는 크롤러를 방해하려는 잘못된 시도로 사용자의 99.8 %를 화나게하고 있습니다. 사이트에 대한 사용자 경험을 파괴하기 때문에 사용자 액세스를 거부하거나 방해하는 것은 좋은 생각이 아닙니다.
KJW

14

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"> <!-->

9

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

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

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

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


1
봇 확인하지 않는 한 CSS는 링크의 속성과는 ... 인간 사용자에게 표시 아니기 때문에 링크를 따라하지 않습니다
밥 써머

1
링크에 "나를 클릭하지 마십시오"라는 레이블을 지정하는 것이 더 좋은 생각 일 것입니다 .. 누군가 CSS가 비활성화 된 경우 (또는 CSS 지원이없는 경우) 링크가 표시됩니다 ..
dbr

좋은 생각. 텍스트를 "."로 변경하십시오. 그리고 배경과 일치하는 CSS 스타일-대부분의 사용자에게 보이지 않게 만들까요? 또는 javascript hide 명령을 링크에 연결할 수없는 봇에게만 표시되도록 1 초 후에 스크립트를 숨기려면 스크립트를 실행 하시겠습니까?
Underverse

1
SEO 관점에서 검은 모자 페널티를 조심하십시오.
Alfred Wallace

6

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

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

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

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

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

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

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

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

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

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


16
"자바 스크립트를 무시한다는 것은 당신이 봇이라는 것을 의미합니다"방법의 주요 결함 : 우리 중 일부는 NoScript 플러그인을 사용합니다. 내가 사이트를 허용하지 않는 한 어떤 사이트도 자바 스크립트를 실행하지 않으며 내가 봇이 아니라고 확신합니다.
Dave Sherohman

2
이제 봇이 자바 스크립트를 실행할 수 있습니다. 2013 년입니다. 그래서 전체 논쟁이 진행됩니다. 웹 크롤러가 순차적으로 사이트를 방문한다고 누가 말합니까? 또 다른 거대한 가정.
KJW

1
자바 스크립트는 허니팟 링크를 표시하기위한 것입니다. 아이디어는 봇 허니팟 링크를 표시하는 자바 스크립트를 구문 분석하여 링크를 따라갈 가능성을 높이는 것입니다. 그러나 실제 사용자의 경우 링크를 표시하는 코드는 실행되지 않습니다. 따라서 NoScript 사용자는 함수를 무작위로 실행하지 않는 사람과 함께 괜찮습니다. 즉, 봇이 무작위로 코드를 실행하는 이유 / 방법을 잘 모르겠으며 요소가 표시 될 수 있는지 확인하기 위해 정적 분석을 수행하고 있다면 멋진 봇이 될 것입니다.
Rick

4

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


2
일반 브라우저처럼 봇이 jquery가 완료 될 때까지 기다릴 수있는 경우는 아닙니다. 이것은 00 년대 초반에 잘 작동했을 것입니다
KJW

3

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

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


3

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

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/


1

추천을 확인할 수도 있습니다. 추천은 봇 정지를 유발할 수 없습니다. 나쁜 추천은 확실히 브라우저가 아님을 의미합니다.

보이지 않는 링크 추가 (아마도 rel = "nofollow"?로 표시됨),

* style="display: none;" on link or parent container
* placed underneath another element with higher z-index

나는 그렇게하지 않을 것입니다. 검은 모자 SEO를 위해 Google에서 블랙리스트에 올릴 수 있습니다. :)


1
정확히 무엇이 그리고 왜 당신을 블랙리스트에 올릴까요?
conteh

1

저는 현재 웹 사이트를 분류하기 위해 스캔하는 회사에서 일하고 있습니다. 또한 사이트에 악성 코드가 있는지 확인합니다.

제 경험상 웹 크롤러의 1 위 차단기 (물론 IE 또는 Firefox UA를 사용하고 robots.txt를 따르지 않습니다. Duh.)는 의도적으로 멀웨어를 호스팅하는 사이트입니다. 사이트가 수동으로 사이트를로드하고 분류하고 악성 코드가 있는지 확인해야하는 사람에게로 되돌아 가기 때문에 고통 스럽습니다.

난 그냥 말하고 당신이 나쁜 기업에 자신을 가하고있는 웹 크롤러를 차단하여.

물론, 그들이 끔찍하게 무례하고 대역폭을 많이 빨아 들인다면 다른 이야기입니다. 왜냐하면 좋은 이유가 있기 때문입니다.


15
죄송합니다. robots.txt를 따르지 않는 크롤러를 실행하면 규칙을 따르지 않는 것입니다. 규칙을 따르지 않음 으로써 당신 자신은 정말 나쁜 회사에 들어가는 것입니다. 웹 사이트 소유자 (robots.txt)가 설정 한 규칙을 시행하는 것이 좋지 않다고 제안함으로써 문제를 거꾸로 뒤집는 것입니다. 기본적으로 콘텐츠의 올바른 소유자가 누구인지 이해하지 못한다고 말합니다.
Jacco 2010-06-26

11
@Jacco : 멀웨어를 찾는 크롤러가 규칙을 준수 했다면 절대 찾을 수 없습니다. 멀웨어 작성자와상의하십시오.
Zan Lynx

5
@Jacco : 비준수 크롤러를 차단하려는 합법적 사이트의 비율은? 1 % 미만. 시도하는 악성 코드 사이트? 60 % 이상. 네, 의심 스럽습니다.
Zan Lynx

4
@Jacco는 실제로 아니요, 공개 된 경우 웹 콘텐츠의 소유자가 없습니다. 수동으로 복사하여 붙여 넣지 않고이 작업을 수행하는 사람은 처벌이 아닌 상을 받아야합니다. 이 모든 저작권 개념은 인터넷에서 폐지되어야합니다. 창의적인 혁신과 신뢰 만이 불투명 한 법적 베일의 위협이 아니라 사람들의 관심을 끌만 한 가치를 쌓을 수 있습니다.
KJW

이 모든 이상 치는 사이트를 운영하는 사람이 사이트에 많은 시간과 생각을 쏟았으며 어느 정도의 기술력을 가지고 있음을 나타냅니다. 그래서 물론 종형 곡선의 대부분을 배제하는.
Parthian Shot

1

사람들은 광범위한 크롤러를 계속 다루지 만 웹 사이트에 특화된 크롤러는 다루지 않습니다.

나는 스텔스 크롤러를 작성하고 그들이 개별적으로 만들어지면 허니팟이나 숨겨진 링크가 전혀 영향을 미치지 않을 것입니다. 특수 크롤러를 감지하는 유일한 방법은 연결 패턴을 검사하는 것입니다.

최고의 시스템은 AI (예 : Linkedin)를 사용하여 AI를 사용하여이를 해결합니다.
가장 쉬운 솔루션은 IP 연결을 분석하고 해당 IP를 블랙리스트에 추가하거나 최소한 임시로 보안 문자를 제공하는 로그 파서를 작성하는 것입니다.

예를 들어
IP X가 2 초마다 연결 foo.com/cars/*.html되지만 다른 페이지에는 연결 되지 않는 경우-봇이나 배고픈 파워 유저 일 가능성이 높습니다.

또는 보호 역할을하는 다양한 자바 스크립트 문제 (예 : Cloudflare의 봇 방지 시스템)가 있지만 쉽게 해결할 수 있으며 사용자 정의를 작성할 수 있으며 크롤러가 노력할 가치가 없도록 충분히 억제 할 수 있습니다.

그러나 합법적 인 오 탐지 사용자에게 기꺼이 질문하고 봇 트래픽을 방지하기 위해 불편을 끼쳐 야합니다. 공개 데이터를 보호하는 것은 불가능한 역설입니다.


-1

짧은 대답 : 중간 수준의 프로그래머가 자신이하는 일을 안다면 실제 사용자에게 영향을주지 않고는 크롤러를 감지 할 수 없습니다. 귀하의 정보를 공개적으로 보유하면 크롤러로부터 정보를 방어 할 수 없습니다 ... 1 차 수정 권리와 같습니다. :)

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.