Detectar rastreadores web 'sigilosos'

107

¿Qué opciones existen para detectar rastreadores web que no quieren ser detectados?

(Sé que enumerar las técnicas de detección permitirá que el programador inteligente de rastreadores sigilosos cree una araña mejor, pero no creo que podamos bloquear los rastreadores inteligentes de todos modos, solo los que cometen errores).

No estoy hablando de rastreadores agradables como googlebot y Yahoo! Sorber. Considero que un bot es bueno si:

  1. se identifica a sí mismo como un bot en la cadena del agente de usuario
  2. lee robots.txt (y lo obedece)

Estoy hablando de los rastreadores malos , que se esconden detrás de agentes de usuario comunes, usan mi ancho de banda y nunca me dan nada a cambio.

Hay algunas trampillas que se pueden construir lista actualizada (gracias Chris, gs) :

  1. Agregar un directorio que solo aparece (marcado como no permitido) en el archivo robots.txt,
  2. 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
  3. detectar quién no entiende las mayúsculas,
  4. detecta quién intenta publicar respuestas pero siempre falla el Captcha.
  5. detectar solicitudes GET a recursos solo POST
  6. detectar intervalo entre solicitudes
  7. detectar el orden de las páginas solicitadas
  8. detectar quién solicita (constantemente) recursos https a través de http
  9. detectar quién no solicita el archivo de imagen (esto en combinación con una lista de agentes de usuario de navegadores con capacidad de imagen conocidos funciona sorprendentemente bien)

Algunas trampas serían activadas por bots tanto "buenos" como "malos". podría combinarlos con una lista blanca:

  1. Dispara una trampa
  2. robots.txt¿ Solicita ?
  3. No dispara otra trampa porque obedeció robots.txt

Otra cosa importante aquí es:
Considere que las personas ciegas usan 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 existen para detectar automáticamente los rastreadores web que intentan enmascararse como visitantes humanos normales?

Actualización
La pregunta no es: ¿Cómo puedo detectar todos los rastreadores? La pregunta es: ¿Cómo puedo maximizar las posibilidades de detectar un rastreador?

Algunas arañas son realmente buenas, y de hecho analizan y entienden html, xhtml, css javascript, script VB, etc.
No me hago ilusiones: no podré vencerlas.

Sin embargo, se sorprenderá de lo estúpidos que son algunos rastreadores. Con el mejor ejemplo de estupidez (en mi opinión) es: convertir todas las URL en minúsculas antes de solicitarlas.

Y luego hay un montón de rastreadores que simplemente 'no son lo suficientemente buenos' para evitar las diversas trampillas.

Jacco
fuente

Respuestas:

15

Hace un tiempo, trabajé con una pequeña empresa de alojamiento para ayudarlos a implementar una solución para esto. El sistema que desarrollé examinó los registros del servidor web en busca de actividad excesiva de cualquier dirección IP dada y emitió reglas de firewall para bloquear a los infractores. Incluía listas blancas de direcciones / rangos IP basadas en http://www.iplists.com/ , que luego se actualizaban automáticamente según fuera necesario al verificar las cadenas de usuario-agente reclamadas y, si el cliente afirmaba ser una araña legítima pero no en el lista blanca, realizó búsquedas de 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 para incluir la dirección en la lista negra / blanca en caso de una evaluación incorrecta.

No he hablado con ese cliente en aproximadamente 6 meses, pero, lo último que supe, el sistema estaba funcionando con bastante eficacia.

Punto lateral: si está pensando en hacer un sistema de detección similar basado en la limitación de la tasa de aciertos, asegúrese de usar totales de al menos un minuto (y preferiblemente al menos cinco minutos). Veo un montón de gente hablando de este tipo de esquemas que quieren a cualquier persona que encabeza el bloque 5-10 hits en un segundo, lo que puede generar falsos positivos en las páginas con imágenes pesadas (a menos que las imágenes están excluidos del recuento) y se generan falsas 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.

Dave Sherohman
fuente
5
Encuentro que el falso positivo debido al bloqueo del rastreador web acaba con el tráfico web. Básicamente, estás cabreando al 99,8% de tu usuario en un pobre intento de obstaculizar a los rastreadores que pueden eludir fácilmente este método ingenuo descrito. Nunca es una buena idea denegar el acceso de los usuarios u obstaculizarlo porque destruye la experiencia del usuario con su sitio.
KJW
14

Vea el Proyecto Honeypot : están configurando trampas de bots a gran escala (y tienen DNSRBL con sus IP).

Utilice URL y HTML complicados:

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

En HTML puedes 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"> <!-->
Kornel
fuente
9

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, sino buscar el signo de un rastreador válido. (como el agente de usuario)

Georg Schölly
fuente
1
A menos que el bot compruebe los atributos CSS del enlace y no siga el enlace porque no es visible para un usuario humano ...
Bob Somers
1
Etiquetar el enlace "NO haga clic en mí" sería una mejor idea. Si alguien tiene CSS desactivado (o no admite CSS), el enlace será visible ..
dbr
Buena idea. Quizás cambie el texto a "." y el estilo CSS para que coincida con el fondo, lo que lo hace invisible para la mayoría de los usuarios. ¿O ejecutar un script para ocultarlo después de 1 segundo dejándolo solo visible para un bot que no puede vincular el comando javascript hide al enlace?
Underverse
1
Tenga cuidado con la pena de sombrero negro desde la perspectiva de SEO.
Alfred Wallace
6

Una cosa que no enumeró, que se usa comúnmente para detectar rastreadores defectuosos.

Velocidad de golpe, los buenos rastreadores web interrumpirán sus visitas para que no inunden un sitio con solicitudes. Los malos harán una de estas tres cosas:

  1. golpear enlaces secuenciales uno tras otro
  2. golpear enlaces secuenciales en alguna secuencia paralela (2 o más a la vez).
  3. golpear enlaces secuenciales en un intervalo fijo

Además, algunos programas de navegación sin conexión absorberán varias páginas, no estoy seguro de qué tipo de umbral querría 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 bot aleatoriza el intervalo de tiempo, puede verificar si los enlaces se atraviesan de manera secuencial o en profundidad, o puede ver si el bot atraviesa una gran cantidad de texto (como en palabras para leer) en un período de tiempo demasiado corto. Algunos sitios también limitan el número de solicitudes por hora.

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 le puede presentar un captcha pidiéndole que demuestre que no es un bot. Sin embargo, nunca he visto eso implementado.

Actualización sobre la ocultación de enlaces

En lo que respecta a ocultar enlaces, puede poner un div debajo de otro, con CSS (colocándolo primero en el orden de dibujo) y posiblemente estableciendo el orden z. Un bot no podría ignorar eso sin analizar todo su javascript para ver si es un menú. Hasta cierto punto, los enlaces dentro de elementos DIV invisibles tampoco se pueden ignorar sin que el bot analice todo el javascript.

Completando esa idea, un javascript no llamado que podría mostrar los elementos ocultos posiblemente engañaría a un subconjunto de bots de análisis de javascript. Y no es mucho trabajo implementar.

Chris
fuente
16
Gran defecto con los métodos "ignorar JavaScript significa que eres un bot": algunos de nosotros usamos el complemento NoScript. Ningún sitio ejecuta JavaScript en mí a menos que lo incluya en la lista blanca y estoy bastante seguro de que no soy un bot.
Dave Sherohman
2
los bots pueden ejecutar Javascript ahora ... es 2013 por el amor de Dios. así que ahí va todo el argumento. ¿Quién dice que los rastreadores web visitan sitios en selecciones secuenciales? otra gran suposición.
KJW
1
El javascript era solo para mostrar un enlace de honeypot. La idea es que los robots van a analizar el Javascript que hará un enlace trampa visible, haciéndolos más propensos a seguir el enlace. Sin embargo, para un usuario real, el código que hace que el enlace sea visible nunca se ejecutaría. Por lo tanto, los usuarios de NoScript, junto con cualquiera que no ejecute funciones al azar, estarían bien. Dicho esto, no estoy seguro de por qué / cómo un bot estaría ejecutando código aleatoriamente, y si estuviera haciendo un análisis estático para determinar si un elemento podría volverse visible, ese sería un bot elegante.
Rick
4

Un método simple de detección de bots del que he oído hablar es la técnica de entrada oculta. Si está intentando proteger un formulario, introduzca una entrada en el formulario con una identificación que parezca completamente legítima. Luego use css en un archivo externo para ocultarlo. O si está realmente paranoico, configure algo como jquery para ocultar el cuadro de entrada al cargar la página. Si haces esto bien, imagino que sería muy difícil para un bot entenderlo. Sabes que esos bots tienen por naturaleza completar todo en una página, especialmente si le das a tu entrada oculta una identificación de algo como id = "fname", etc.

Noob ágil
fuente
2
no si los bots pueden esperar a que termine jquery, como puede hacerlo un navegador normal. Esto habría funcionado bien a principios de la década de
2000
3

En realidad, no es tan fácil mantenerse al día con las buenas cadenas de agentes de usuario. Las versiones del navegador van y vienen. Hacer una estadística sobre cadenas de agentes 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.

iny
fuente
3

No probado, pero aquí hay una buena lista de agentes de usuario con los que podría 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/

Brian Armstrong
fuente
1

También puede consultar las referencias. Ninguna referencia podría levantar sospechas 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 SEO de sombrero negro :)

Marinero danubiano
fuente
1
¿Qué es exactamente y por qué te pondría en la lista negra?
conteo
1

Actualmente trabajo para una empresa que escanea sitios web para clasificarlos. También verificamos sitios en busca de malware.

En mi experiencia, los bloqueadores número uno de nuestro rastreador web (que por supuesto usa IE o Firefox UA y no obedece a robots.txt. Duh.) Son sitios que alojan malware intencionalmente. Es una molestia porque el sitio luego recurre a un humano que tiene que cargarlo manualmente, clasificarlo y verificarlo en busca de malware.

Solo digo que al bloquear los rastreadores web se está poniendo en malas compañías.

Por supuesto, si son horriblemente groseros y absorben toneladas de tu ancho de banda, es una historia diferente porque entonces tienes una buena razón.

Zan Lynx
fuente
15
Lo siento, pero si ejecuta un rastreador que no obedece a robots.txt, no está obedeciendo las reglas. Al no obedecer las reglas, usted mismo se está poniendo en una mala compañía. Al sugerir que hacer cumplir las reglas establecidas por el propietario del sitio web (en robots.txt) es una mala práctica, está dando la vuelta al problema por error. Básicamente, declaras que no entiendes quién es el propietario legítimo del contenido.
Jacco
11
@Jacco: Si un rastreador que busca malware obedeciera las reglas, nunca encontraría ninguno. Ve a hablar con los autores de malware.
Zan Lynx
5
@Jacco: ¿Porcentaje de sitios legítimos que intentan bloquear rastreadores no compatibles? Menos del 1%. Sitios de malware que lo intentan? Más de 60%. Así que sí, es sospechoso.
Zan Lynx
4
@Jacco en realidad no, no hay propietarios de un contenido en la web si es público. Alguien que esté haciendo esto sin copiar y pegar manualmente debería recibir un premio, no un castigo. Todo este concepto de derechos de autor debe abolirse en Internet. Solo la innovación creativa y la confianza pueden generar valor y ser digno de la atención de la gente, no por alguna amenaza de velo legal opaco.
KJW
Todo lo que indica este valor atípico es que la persona que administra el sitio dedicó mucho tiempo y pensamiento en el sitio, y tiene cierto grado de habilidad técnica. Entonces, por supuesto, eso descarta la mayor parte de la curva de campana.
Parthian Shot
1

Las personas siguen dirigiéndose a rastreadores amplios, pero no a rastreadores especializados para su sitio web.

Escribo rastreadores sigilosos y, si se construyen individualmente, ninguna cantidad de botes de miel o enlaces ocultos tendrá ningún efecto: la única forma real de detectar rastreadores especializados es inspeccionando los patrones de conexión.

Los mejores sistemas utilizan IA (por ejemplo, Linkedin) utilizan IA para abordar esto.
La solución más sencilla es escribir analizadores de registro que analicen las conexiones IP y simplemente incluyan esas IP en la lista negra o sirvan captcha, al menos temporalmente.

por ejemplo,
si se ve IP X cada 2 segundos conectándose a foo.com/cars/*.htmlotras páginas, pero no a otras, lo más probable es que sea un bot o un usuario avanzado hambriento.

Alternativamente, hay varios desafíos de javascript que actúan como protección (por ejemplo, el sistema anti-bot de Cloudflare), pero se pueden resolver fácilmente, puede escribir algo personalizado y eso podría ser lo suficientemente disuasorio para que no valga la pena el esfuerzo del rastreador.

Sin embargo, debe hacer una pregunta si está dispuesto a dar falsos positivos a usuarios legítimos e introducir inconvenientes para evitar el tráfico de bots. La protección de los datos públicos es una paradoja imposible.

Granitosaurio
fuente
-1

respuesta corta: si un programador de nivel medio sabe lo que está haciendo, no podrá detectar un rastreador sin afectar al usuario real. Tener su información públicamente no podrá defenderla contra un rastreador ... es como la primera enmienda a la derecha :)

Alex HOMBRE
fuente