¿Cómo puedo detectar y bloquear bots?

9

Por ejemplo, si estoy en stackoverflow y actualizo mi página varias veces seguidas, empieza a pensar que soy un bot y me bloquea.

¿Cómo puedo crear algo como esto en mi propio sitio?

    
pregunta JD Isaacks 24.06.2011 - 17:57
fuente

4 respuestas

10

Use Roboo: enlace

Demostrado en Blackhat en 2011. Muy efectivo y fácil de poner en marcha. Recomendaría sobre cualquier uso de CAPTCHA

"Roboo utiliza mecanismos avanzados de desafío / respuesta HTTP no interactivos para detectar y, posteriormente, mitigar los robots HTTP, al verificar la existencia de HTTP, HTML, DOM, Javascript y Flash en el lado del cliente.

Un nivel tan profundo de verificación elimina el mayor porcentaje de robots HTTP que no usan navegadores reales o implementan pilas de navegadores completas, lo que resulta en la mitigación de varias amenazas web:

  • herramientas HTTP de denegación de servicio, por ejemplo, Cañón de iones de órbita baja
  • Exploración de vulnerabilidades - por ejemplo, Acunetix Web Vulnerability Scanner, Metasploit Pro, Nessus Exploits web
  • Carteles de comentarios automáticos / spam de comentarios como reemplazo de los métodos convencionales de CAPTCHA
  • Arañas, rastreadores y otros males robóticos "

También es una buena medida contra DDOS: enlace

    
respondido por el Rakkhi 24.06.2011 - 21:10
fuente
4

Como todo últimamente, puede lanzar su propia solución o usar software como servicio. Hay algunos servicios web que hacen este tipo de cosas, si te sientes cómodo con un posible compromiso en la privacidad de los visitantes.

El más notable quizás es Cloudflare , que puede configurarse como protección básica (gratuita) o avanzada (pagada). Es una startup muy popular últimamente con muchos sitios que la usan.

Funciona como un proxy transparente frente a su sitio web y verifica las solicitudes entrantes de acuerdo con varios criterios, utilizando un amplio crowdsourcing acerca de dónde provienen los datos y si alguien ha visto antes que IP hace cosas maliciosas. Las fuentes de datos incluyen bases de datos abiertas como enlace . A continuación, presenta a los usuarios una página de desafío que solicita verificar, tal vez completar un captcha. Clasifica las "amenazas" como zombis de botnets, spammers masivos, etc. En la versión de pago también funciona como WAF, intentando capturar los intentos de inyección de sql / xss.

    
respondido por el john 26.06.2011 - 21:40
fuente
3

Primero, debe evaluar qué partes de su aplicación corren el riesgo de ser automatizadas para obtener algún tipo de ventaja. Por ejemplo, ¿qué se ganará al volver a cargar esa página de flujo de pila varias veces? ¿Quizás un bot por un usuario para aumentar los números de vista en sus propias preguntas / respuestas?

El siguiente es determinar qué comportamiento constituye un posible bot. Para su ejemplo de stackoverflow, sería quizás un cierto número de cargas de página en un marco de tiempo pequeño dado de un solo usuario (no solo basado en IP, sino también agente de usuario, puerto de origen, etc.)

A continuación, crea el motor que contiene estas reglas, recopila datos de seguimiento, supervisa cada solicitud para analizar los criterios y marca a los clientes como robots. Creo que querría que este motor se ejecute en los registros web y no en las solicitudes en vivo por razones de rendimiento, pero podría cargar esto.

Me imagino que el sistema funcionaría así (utilizando su ejemplo de stackoverflow): el motor lee una entrada de registro de un hit web, luego la agrega a su base de datos de webhits, agregando ese hit con todos los demás hits de ese usuario único. en esa página única, y registre la marca de tiempo, para que se registren dos marcas de tiempo, la del primer hit de la serie y la de la más reciente, y se incremente el conteo total de hits de la serie.

Luego consulta esa lista restando el tiempo del primer golpe del momento del último para todas las series que tienen un conteo de golpes por encima de tu umbral. Los usuarios únicos que no pasan la verificación están marcados. Luego, en el front-end, simplemente verifica todos los resultados contra esa lista de usuarios marcados y actúa en consecuencia. Por supuesto, mi algoritmo es defectuoso, ya que lo pensé en el acto.

Si realiza una búsqueda en Google, encontrará que hay muchos códigos gratuitos en diferentes idiomas que tienen esta funcionalidad. El truco es idear las reglas correctas para marcar el comportamiento del bot.

    
respondido por el queso 24.06.2011 - 20:13
fuente
2

Sería bastante sencillo tener un servicio que busque intentos de conexión, y siempre que se realicen varios intentos en una sucesión rápida desde la misma dirección IP, se agrega esa dirección a una "lista negra" de cuentas bloqueadas. (O, si quieres ser elegante, lanza alguna aplicación / consulta para que la persona "verifique" que no es un bot)

Fuera de la parte superior de mi cabeza (nunca lo he intentado) diría que se podría mantener un diccionario de direcciones IP de tamaño fijo, siendo las claves la última vez que hicieron un intento de conexión y cuando son las horas demasiado cerca bloquéelos ... o alternativamente, el tipo de diccionario 'borra' sí mismo los valores anteriores a x cantidad de tiempo, e incrementa la clave de cada valor para cada conexión en ese marco de tiempo ... si hay demasiados en la 'x' marco de tiempo, están bloqueados.

Una respuesta vaga, lo sé, ¡pero espero que ayude!

    
respondido por el DKGasser 24.06.2011 - 19:48
fuente

Lea otras preguntas en las etiquetas