¿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:
- se identifica a sí mismo como un bot en la cadena del agente de usuario
- 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) :
- Agregar un directorio que solo aparece (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,
- detecta quién intenta publicar respuestas pero siempre falla el Captcha.
- detectar solicitudes GET a recursos solo POST
- detectar intervalo entre solicitudes
- detectar el orden de las páginas solicitadas
- detectar quién solicita (constantemente) recursos https a través de http
- 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:
- Dispara una trampa
robots.txt
¿ Solicita ?- 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.
fuente
Vea el Proyecto Honeypot : están configurando trampas de bots a gran escala (y tienen DNSRBL con sus IP).
Utilice URL y HTML complicados:
En HTML puedes usar muchos trucos con comentarios, elementos CDATA, entidades, etc:
fuente
Una solución fácil es crear un enlace y hacerlo invisible.
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)
fuente
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:
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 enlacesEn 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.
fuente
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.
fuente
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.
fuente
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í:
Tomado de: http://perishablepress.com/press/2007/10/15/ultimate-htaccess-blacklist-2-compressed-version/
fuente
También puede consultar las referencias. Ninguna referencia podría levantar sospechas de bot. Una mala referencia significa que ciertamente no es un navegador.
Yo no haría eso. Puede terminar en la lista negra de Google para SEO de sombrero negro :)
fuente
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.
fuente
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/*.html
otras 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.
fuente
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 :)
fuente