2008-12-04 7 views
15

Necesito escribir un código para analizar si un determinado usuario de nuestro sitio es o no un bot. Si es un bot, tomaremos alguna acción específica. Ver el User Agent no es algo que sea exitoso para nada más que bots amigables, ya que puedes especificar cualquier agente de usuario que desees en un bot. Estoy buscando comportamientos de bots hostiles. Varias ideas que he tenido hasta el momento son:Programmatic Bot Detection

  • Si no tiene un ID de navegador
  • Si usted no tiene un ID de sesión
  • No se puede escribir una cookie

Obviamente, hay algunos casos en los que un usuario legítimo parecerá un bot, pero está bien. ¿Hay otras formas programáticas para detectar un robot o detectar algo que se parece a un robot?

+1

Un robot decente probablemente podrá tener todas esas cosas que usted propuso. El sistema se representará como un navegador estándar o tendrán un nombre único. Podrían escribir cookies y también tener una sesión. –

+0

He escrito un bot que engaña a los tres. No es difícil manejar cookies o identificadores de navegador. – epochwolf

+0

Hacer un evento de mouse? Bots no tienen ratones. – r4ge

Respuesta

2

Usted dice que está bien que algunos usuarios aparecen como los robots, por lo tanto,

La mayoría de los robots no se ejecutan JavaScript. Use javascript para hacer una llamada tipo Ajax al servidor que identifica esta dirección IP como NonBot. Almacene eso durante un período de tiempo determinado para identificar futuras conexiones de esta IP como buenos clientes y para evitar más llamadas innecesarias de JavaScript.

2

Una prueba sencilla es javascript:

<script type="text/javascript"> 
document.write('<img src="/not-a-bot.' + 'php" style="display: none;">'); 
</script> 

La no-a-bot.php puede añadir algo a la sesión a la bandera que el usuario no es un robot, a continuación, volver GIF de píxel único.

La URL está dividida para ocultarla del bot.

+1

La única dificultad es que muchos usuarios ahora desactivan JavaScript debido a problemas de seguridad. Es casi gracioso que con eso sería una de las maneras más fáciles de probar la autenticidad. –

+9

¿De verdad? Con javascript desactivado, hay un montón de sitios que simplemente no funcionan hoy en día. Pensé que se estaban ejecutando más usuarios con javascript activado a medida que pasaba el tiempo. –

+3

Cuando uso Firefox tengo noscript activo la mayoría de las veces. Así que ir a un sitio con una configuración como esta me marcaría como un robot desde el principio. –

8

Aclare por qué quiere excluir bots, y qué tan tolerante es de clasificación errónea.

Es decir, ¿tiene que excluir todos los bot a expensas de tratar a los usuarios reales como los bots? ¿O está bien si los robots rastrean su sitio siempre que no tengan un impacto en el rendimiento?

La única manera de excluir todos los bots es cerrar su sitio web. Un usuario malintencionado puede distribuir su bot a suficientes máquinas para que no pueda distinguir su tráfico de los usuarios reales. Trucos como JavaScript y CSS no detendrán a un atacante determinado.

Si un "medio feliz" es satisfactorio, un truco que podría ser útil es ocultar los enlaces con CSS para que no sean visibles para los usuarios en un navegador, pero todavía estén en el HTML. Cualquier agente que siga uno de estos enlaces de "veneno" es un bot.

+7

Si el usuario tenía algún tipo de acelerador web instalado, aún podría visitar los enlaces invisibles, si el acelerador web no fuera extremadamente inteligente. – Kibbee

8

Los agentes de usuario pueden ser falsificados. Captchas han sido descifradas Las cookies válidas se pueden enviar de vuelta a su servidor con solicitudes de página. Los programas legítimos, como Adobe Acrobat Pro, pueden entrar y descargar su sitio web en una sola sesión. Los usuarios pueden deshabilitar JavaScript. Como no existe una medida estándar del comportamiento del usuario "normal", no se puede diferenciar de un bot.

En otras palabras: no se puede hacer sin atraer al usuario a algún tipo de chat interactivo y esperar que pasen la Prueba de Turing, y de nuevo, también podrían ser un bot muy bueno.

0

Bueno, esto es realmente para una página particular del sitio. No queremos que un bot envíe el formulario b/c. Desordena el seguimiento. Honestamente, los bots amigables, Google, Yahoo, etc. no son un problema, ya que generalmente no llenan el formulario para comenzar.Si sospecháramos que alguien es un bot, podríamos mostrarles una imagen de captcha o algo así ... Si pasaron, no son un bot y el formulario envía ...

He oído cosas como poner un formulario en flash, o hacer el envío de javascript, pero preferiría no evitar que los usuarios reales usen el sitio hasta que sospeché que eran un bot ...

0

Creo que su idea al verificar el ID de la sesión ya será bastante útil.

Otra idea: Usted puede comprobar si los recursos incrustados se descargan también.

Un bot que no se carguen las imágenes (por ejemplo, para ahorrar tiempo y ancho de banda) debe ser distinguible de un navegador que normalmente se carga las imágenes incrustadas en una página.

Tal cheque sin embargo, no podría ser adecuado como un control en tiempo real, ya que tendría para analizar algún tipo de registro del servidor que podría llevar mucho tiempo.

+0

IE y Firefox al menos tienen la capacidad de no descargar imágenes. –

+0

Safari también tiene la opción de desactivar imágenes. – epochwolf

+2

Lynx. No olvides a Lynx. Que nadie usa Pero que * puede * enviar formularios. Sí ... – Brian

1

Para cada sesión en el servidor se puede determinar si el usuario estaba en cualquier punto de clic o escribir demasiado rápido. Después de un número determinado de repeticiones, configure el indicador "isRobot" como verdadero y conserve los recursos dentro de esa sesión. Normalmente no le dices al usuario que ha sido detectado por un robot, ya que él solo comenzaría una nueva sesión en ese caso.

+0

Esto no sería infalible, ya que existen muchas soluciones de software legítimas para automatizar complete formularios web en nombre del usuario. – sep332

+0

Bueno, nada es infalible, pero de nuevo solo das una QOS ligeramente menor a esa sesión. Solo haríamos esto después de algunas páginas de comportamiento inhumanamente rápido. – krosenvold

0

Hola, gracias por todas las respuestas. Creo que una combinación de algunas sugerencias funcionará bien. Principalmente, el elemento de formulario oculto que mide la rapidez con la que se completó el formulario y posiblemente la idea del "enlace de veneno". Creo que cubrirá la mayoría de las bases. Cuando hablas de bots, no vas a encontrarlos a todos, así que no tiene sentido pensar que lo harás ... Bots tontos.

+0

Bueno, "bots tontos" a excepción de Google, sin la cual muchos sitios no recibirían ningún tráfico :) – Conceptdev

2

He aquí una idea:

La mayoría de los robots no se descarga CSS, JavaScript e imágenes. Simplemente analizan el html.

Si pudiera seguir la pista en la sesión de un usuario si son o no descarga todo lo anterior, por ejemplo, al enrutar todas las solicitudes de descarga a través de un script que registra los intentos, puede identificar rápidamente a los usuarios que solo descargan el html en bruto (muy pocos usuarios normales lo harán).