web-crawler - scraping - web crawler tool
Detección de rastreadores web "sigilosos" (9)
¿Qué opciones hay para detectar web crawlers que no quieren ser detectados?
(Sé que las técnicas de detección de listados permitirán al programador inteligente de rastreo sigiloso hacer una mejor araña, pero no creo que alguna vez seamos capaces de bloquear a los rastreadores furtivos inteligentes de todos modos, solo aquellos que cometen errores).
No estoy hablando de los rastreadores agradables como googlebot y Yahoo! Sorber. Considero un bot agradable si:
- se identifica como un bot en la cadena de agente de usuario
- lee el archivo robots.txt (y lo obedece)
Estoy hablando de los malos rastreadores, escondiéndome detrás de agentes de usuario comunes, usando mi ancho de banda y nunca dándome nada a cambio.
Hay algunas trampillas que se pueden construir lista actualizada (gracias Chris, gs) :
- Agregar un directorio solo listado (marcado como no permitido) en el archivo robots.txt,
- Agregar enlaces invisibles (posiblemente marcados como rel = "nofollow"?),
- style = "display: none;" en el enlace o contenedor principal
- colocado debajo de otro elemento con mayor índice z
- detectar quién no entiende las mayúsculas,
- detectar quién intenta publicar respuestas pero siempre falla el Captcha.
- detectar solicitudes GET a recursos POST-only
- detectar el intervalo entre las solicitudes
- detectar el orden de las páginas solicitadas
- detectar quién (consistentemente) solicita recursos https en lugar de http
- detectar quién no solicita el archivo de imagen (esto en combinación con una lista de usuarios-agentes de navegadores compatibles con imágenes conocidas funciona sorprendentemente bien)
Algunas trampas serían activadas por bots "buenos" y "malos". puedes combinarlos con una lista blanca:
- Dispara una trampa
- Solicita
robots.txt
? - No provoca otra trampa porque obedeció a
robots.txt
Otra cosa importante aquí es:
Considere a las personas ciegas usando lectores de pantalla: brinde a las personas una forma de comunicarse con usted o resuelva un Captcha (sin imagen) para continuar navegando.
Qué métodos hay para detectar automáticamente a los rastreadores web que intentan enmascararse como visitantes humanos normales.
Actualizar
La pregunta no es: ¿Cómo atrapo a cada rastreador? La pregunta es: ¿Cómo puedo maximizar la posibilidad de detectar un rastreador?
Algunas arañas son realmente buenas, y en realidad analizan y entienden html, xhtml, css javascript, script VB, etc ...
No tengo ilusiones: no podré vencerlos.
Sin embargo, te sorprendería lo estúpidos que son algunos rastreadores. Con el mejor ejemplo de estupidez (en mi opinión): envíe todas las URL a minúsculas antes de solicitarlas.
Y luego hay un montón de rastreadores que simplemente no son lo suficientemente buenos para evitar las distintas trampas.
Actualmente trabajo para una empresa que escanea sitios web para clasificarlos. También revisamos los sitios en busca de malware.
En mi experiencia, los bloqueadores número uno de nuestro rastreador web (que, por supuesto, utiliza un IE de IE o Firefox y no obedece a robots.txt. Duh.) Son sitios que albergan malware intencionalmente. Es un dolor porque el sitio luego recae en un humano que tiene que cargar manualmente el sitio, clasificarlo y revisarlo en busca de malware.
Solo digo que, al bloquear los rastreadores web, te estás metiendo en una mala compañía.
Por supuesto, si son terriblemente groseros y absorben toneladas de tu ancho de banda, es una historia diferente porque entonces tienes una buena razón.
En realidad, no es tan fácil mantenerse al día con las buenas cadenas de agente de usuario. Las versiones del navegador van y vienen. Hacer una estadística sobre cadenas de agente de usuario por diferentes comportamientos puede revelar cosas interesantes.
No sé hasta qué punto esto podría automatizarse, pero al menos es una cosa diferenciadora.
Hace un tiempo, trabajé con una pequeña empresa de hosting para ayudarlos a implementar una solución a esto. El sistema que desarrollé examinó los registros del servidor web por actividad excesiva desde cualquier dirección IP dada y emitió reglas de firewall para bloquear a los delincuentes. Incluía listas blancas de direcciones IP / rangos basados en http://www.iplists.com/ , que luego se actualizaban automáticamente según fuera necesario mediante la comprobación de las cadenas reclamadas de usuario-agente y, si el cliente afirmaba ser una araña legítima pero no en el lista blanca, realizó búsquedas DNS / DNS inverso para verificar que la dirección IP de origen corresponde al propietario reclamado del bot. Como medida de seguridad, estas acciones se informaron al administrador por correo electrónico, junto con enlaces a la lista negra / blanca en caso de una evaluación incorrecta.
No he hablado con ese cliente en 6 meses más o menos, pero, lo último que escuché es que el sistema funciona bastante bien.
Punto secundario: si está pensando en hacer un sistema de detección similar basado en la limitación de la velocidad de aciertos, asegúrese de usar totales de al menos un minuto (y preferiblemente de al menos cinco minutos). Veo mucha gente hablando de este tipo de esquemas que quieren bloquear a cualquiera que supere los 5-10 hits en un segundo, lo que puede generar falsos positivos en páginas con muchas imágenes (a menos que las imágenes se excluyan de la cuenta) y generará fallas Es positivo cuando alguien como yo encuentra un sitio interesante que quiere leer todo, por lo que abre todos los enlaces en pestañas para cargar en segundo plano mientras lee el primero.
No probado, pero aquí hay una buena lista de usuarios-agentes de los que podrías hacer una expresión regular. Podría llevarte la mayor parte del camino hasta allí:
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:[email protected]|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]
Tomado de: http://perishablepress.com/press/2007/10/15/ultimate-htaccess-blacklist-2-compressed-version/
También puedes verificar las referencias. Ninguna referencia podría generar sospecha de bot. Una mala referencia significa que ciertamente no es un navegador.
Agregar enlaces invisibles (posiblemente marcados como rel = "nofollow"?),
* style="display: none;" on link or parent container
* placed underneath another element with higher z-index
Yo no haría eso. Puede terminar en la lista negra de google para black hat SEO :)
Un método simple de detección de bot que he escuchado de formularios es la técnica de entrada oculta. Si está intentando proteger un formulario, ingrese una entrada en el formulario con una identificación que se ve completamente legítima. Luego use css en un archivo externo para ocultarlo. O si es realmente paranoico, configure algo como jquery para ocultar el cuadro de entrada al cargar la página. Si haces esto bien, me imagino que sería muy difícil para un robot descubrirlo. Ya sabes que esos bots lo tienen en la naturaleza para completar todo en una página, especialmente si le das a tu entrada oculta una identificación de algo como id = "fname", etc.
Una cosa que no has enumerado, que se usa comúnmente para detectar rastreadores malos.
Velocidad de ataque, los buenos rastreadores web romperán sus hits para que no inunden un sitio con solicitudes. Los malos harán una de tres cosas:
- golpear enlaces secuenciales uno tras otro
- golpear enlaces secuenciales en alguna secuencia paralela (2 o más a la vez)
- golpear enlaces secuenciales en un intervalo fijo
Además, algunos programas de navegación sin conexión perderán una cantidad de páginas, no estoy seguro de qué tipo de umbral quieres usar, para comenzar a bloquear por dirección IP.
Este método también capturará programas de duplicación como fmirror o wget.
Si el robot aleatoriza el intervalo de tiempo, puede verificar si los enlaces se recorren de forma secuencial o en profundidad, o puede ver si el bot está atravesando una gran cantidad de texto (como en las palabras para leer) en un demasiado corto período de tiempo. Algunos sitios limitan el número de solicitudes por hora, también.
En realidad, escuché una idea en alguna parte, no recuerdo dónde, que si un usuario obtiene demasiados datos, en términos de kilobytes, se puede presentar un captcha pidiéndoles que prueben que no son un bot. Aunque nunca he visto eso implementado.
Actualización sobre Ocultar EnlacesEn lo que respecta a la ocultación de enlaces, puede poner un div debajo de otro, con CSS (colocándolo primero en el orden de sorteo) y posiblemente estableciendo el orden z. Un bot no podría ignorar eso, sin analizar todo tu javascript para ver si se trata de un menú. Hasta cierto punto, los enlaces dentro de los elementos DIV invisibles tampoco pueden ignorarse sin que el bot analice todos los javascript.
Llevando esa idea a su finalización, javascript no llamado que potencialmente podría mostrar los elementos ocultos podría engañar a un subconjunto de los bots de análisis de JavaScript. Y no es mucho trabajo implementar.
Una solución fácil es crear un enlace y hacerlo invisible
<a href="iamabot.script" style="display:none;">Don''t click me!</a>
Por supuesto, debe esperar que algunas personas que miran el código fuente sigan ese enlace solo para ver a dónde conduce. Pero podrías presentarles a esos usuarios un captcha ...
Los rastreadores válidos, por supuesto, también seguirían el enlace. Pero no debe implementar un rel = nofollow, pero busque el signo de un rastreador válido. (como el agente de usuario)
Ver Proyecto Honeypot : están configurando trampas de bots a gran escala (y tienen DNSRBL con sus IP).
Use URL y HTML complicados:
<a href="//example.com/"> = http://example.com/ on http pages.
<a href="page&#hash"> = page& + #hash
En HTML puede usar muchos trucos con comentarios, elementos CDATA, entidades, etc.
<a href="foo<!--bar-->"> (comment should not be removed)
<script>var haha = ''<a href="bot">''</script>
<script>// <!-- </script> <!--><a href="bot"> <!-->