una hacer encuestas encuesta como combot canal bot best agregar php javascript web-services analytics

php - hacer - Dile a bots aparte de los visitantes humanos para las estadísticas?



combot telegram (14)

Estoy buscando rodar mi propio script simple de estadísticas web.

El único obstáculo importante en el camino, hasta donde puedo ver, es distinguir a los visitantes humanos de los bots. Me gustaría tener una solución para lo que no necesito mantener regularmente (es decir, no quiero actualizar archivos de texto con User-agents relacionados con bot).

¿Hay algún servicio abierto que haga eso, como lo hace Akismet por correo no deseado? ¿O hay un proyecto de PHP dedicado a reconocer arañas y bots y ofrece actualizaciones frecuentes?

Para aclarar: no estoy buscando bloquear bots. No necesito resultados 100% herméticos . Solo quiero excluir a todos los que pueda de mis estadísticas. Sepa que analizar el user-Agent es una opción, pero mantener los patrones para analizar es mucho trabajo. Mi pregunta es si hay algún proyecto o servicio que ya lo haga.

Bounty: pensé que presionaría esto como una pregunta de referencia sobre el tema. La contribución mejor / más original / técnicamente más viable recibirá la cantidad de recompensa.


=? Lo siento, incomprendido. Puede probar otra opción que he configurado en mi sitio: crear una página web no vinculada con un nombre difícil / extraño y registrar las visitas a esta página. La mayoría, si no todos, los visitantes de esta página serán robots, de esa manera podrás crear tu lista de robots de forma dinámica.

La respuesta original sigue (obteniendo calificaciones negativas)

La única forma confiable de decir bots a humanos es [CAPTCHAS] [1]. Puede usar [reCAPTCHA] [2] si le conviene.

[1]: http://en.wikipedia.org/wiki/Captcha
[2]: http://recaptcha.net/


Actualmente uso AWstats y Webalizer para monitorear mis archivos de registro para Apasce2 y hasta ahora lo han estado haciendo muy bien. Si desea puede echar un vistazo a su código fuente, ya que es un proyecto de código abierto.

Puede obtener la fuente en http://awstats.sourceforge.net o, alternativamente, consultar las preguntas frecuentes http://awstats.sourceforge.net/docs/awstats_faq.html

Espero que ayude, RayQuang


Considere un script de PHP stats que se camufla como una imagen de fondo de CSS (proporcione los encabezados de respuesta correctos, al menos el tipo de contenido y el control de caché, pero escriba una imagen vacía).

Algunos bots analizan JS, pero ciertamente nadie carga imágenes CSS. Una de las dificultades, como ocurre con JS, es que excluirá los navegadores basados ​​en texto con esto, pero eso es menos del 1% de la población de la red mundial. Además, sin duda hay menos clientes con discapacidades de CSS que los clientes con discapacidades JS (¡móviles!).

Para que sea más sólido para el caso (no excepcional) de que los bots más avanzados (Google, Yahoo, etc.) puedan rastrearlos en el futuro, no permita el camino a la imagen CSS en el robots.txt (que los mejores bots respetarán de todos modos) .


En lugar de tratar de mantener una lista increíblemente larga de agentes de usuario spider, buscamos elementos que sugieran el comportamiento humano. El principio de esto es que dividimos nuestro recuento de sesiones en dos figuras: el número de sesiones de una sola página y el número de sesiones de varias páginas. Soltamos una cookie de sesión y la utilizamos para determinar las sesiones de varias páginas. También soltamos una cookie persistente de "Identificación de Máquina"; un usuario recurrente (se encontró una cookie de ID de máquina) se trata como una sesión de varias páginas, incluso si solo ven una página en esa sesión. Es posible que tenga otras características que impliquen un visitante "humano": el remitente es Google, por ejemplo (aunque creo que MS Search bot máscaras como un UserAgent estándar referido con una palabra clave realista para comprobar que el sitio no muestra contenido diferente [ a lo dado a su Bot], ¡y ese comportamiento se parece mucho a un humano!)

Por supuesto, esto no es infalible y, en particular, si hay muchas personas que llegan y hacen "clic", no será una buena estadística para ti, ni si predominan personas con cookies desactivadas (en nuestro caso, no podrá usar nuestro sitio [carrito de compras] sin las cookies de sesión habilitadas).

Tomando los datos de uno de nuestros clientes, encontramos que el recuento diario de una sola sesión está por todas partes, un orden de magnitud diferente de un día a otro; sin embargo, si restamos 1,000 de la sesión de varias páginas por día, tenemos una tasa casi lineal de 4 sesiones de varias páginas por pedido / dos sesiones por canasta. ¡No tengo idea real de las otras 1,000 sesiones de varias páginas por día!


La forma más fácil es verificar si su agente de uso incluye ''bot'' o ''spider''. La mayoría lo hace .


Los humanos y los bots harán cosas similares, pero los bots harán cosas que los humanos no hacen. Tratemos de identificar esas cosas. Antes de ver el comportamiento, RayQuang''s comentario RayQuang''s como útil. Si un visitante tiene una cadena de agente de usuario de bot, probablemente sea un bot. No puedo imaginar a nadie dando vueltas con "Google Crawler" (o algo similar) como UA a menos que estén trabajando para romper algo. Sé que no desea actualizar una lista manualmente, pero extraerla automáticamente debería ser buena, e incluso si se mantiene obsoleta durante los próximos 10 años, será útil.

Algunos ya han mencionado el Javascript y la carga de imágenes, pero Google hará las dos cosas. Debemos asumir que ahora hay varios robots que harán ambas cosas, por lo que ya no son indicadores humanos. Sin embargo, lo que los bots seguirán haciendo de forma única es seguir un enlace "invisible". Enlace a una página de una manera muy furtiva que no puedo ver como usuario. Si eso se sigue, tenemos un bot.

Bots a menudo, aunque no siempre, respeta robots.txt. A los usuarios no les importa el archivo robots.txt, y probablemente podamos suponer que cualquier persona que recupere el archivo robots.txt es un bot. Sin embargo, podemos ir un paso más allá y vincular una página CSS ficticia a nuestras páginas que está excluida por robots.txt. Si nuestro CSS normal está cargado pero nuestro CSS falso no lo es, definitivamente es un bot. Tendrás que construir (probablemente una en memoria) una tabla de cargas por IP y hacer una coincidencia no contenida en la coincidencia, pero eso debería ser una información realmente sólida.

Entonces, para usar todo esto: mantenga una tabla de base de datos de bots por dirección IP, posiblemente con limitaciones de timestamp. Agregue todo lo que sigue a su enlace invisible, agregue cualquier cosa que cargue el CSS "real" pero ignora el CSS de robots.txt. Tal vez agregue todos los descargadores de robots.txt también. Filtra la cadena de agente de usuario como el último paso, y considera usarla para hacer un análisis rápido de estadísticas y ver qué tan fuertemente parecen funcionar esos métodos para identificar cosas que sabemos que son bots.


Me sorprende que nadie haya recomendado implementar una prueba de Turing . Solo tiene una ventana de chat con humanos en el otro extremo.

Una solución programática simplemente no funcionará: vea qué sucede cuando PARRY se encuentra con el DOCTOR

Estos dos "personajes" son robots "parlanchines" que se escribieron en el curso de la investigación de IA en el ''70: para ver cuánto tiempo podían engañar a una persona real y hacerla creer que también era una persona. El personaje PARRY fue modelado como esquizofrénico paranoico y THE DOCTOR como un psicoterapeuta estereotipado.

Aquí hay más antecedentes


Para empezar, si su software va a funcionar basado en Javascript, la mayoría de los bots serán automáticamente eliminados como bots, generalmente, no tienen Javascript.

Sin embargo, la respuesta directa a su pregunta es seguir una lista de bots y agregar su user-agent a la lista de filtrado.

Eche un vistazo a esta lista de bots.

Esta lista de usuario-agente también es bastante buena. Solo elimina todas las B y estás listo.

EDITAR: El increíble trabajo realizado por eSniff tiene la lista anterior aquí " en una forma que se puede consultar y analizar más fácilmente. Robotstxt.org/db/all.txt Cada nuevo Bot está definido por un robot-id: XXX. Deberías poder para descargarlo una vez por semana y analizarlo en algo que tu script pueda usar "como puedes leer en su comentario.

¡Espero eso ayude!


Puede excluir todas las solicitudes que provengan de un agente de usuario que también solicite robots.txt . Todos los bots que se porten bien lo harán, pero los bots malos escaparán a la detección.

También tendría problemas con los falsos positivos: como ser humano, no es muy frecuente que lea un archivo robots.txt en mi navegador, pero ciertamente puedo. Para evitar que estos se muestren incorrectamente como bots, puede incluir en la lista blanca algunos Agentes de usuario comunes del navegador y considerar que siempre son humanos. Pero esto simplemente se convertiría en mantener una lista de Agentes de usuario para navegadores en lugar de una para bots.

Por lo tanto, este enfoque did-they-request-robots.txt ciertamente no dará resultados 100% herméticos, pero puede proporcionar cierta heurística para alimentar una solución completa.


Registre el movimiento del mouse y desplácese usando javascript. Puedes ver a partir de los datos grabados si es un humano o un bot. A menos que el robot sea realmente sofisticado e imite los movimientos del ratón humano.


Tenga un gif 1x1 en sus páginas del que no pierda de vista. Si se carga, es probable que sea un navegador. Si no está cargado, es probable que sea un script.


Uso lo siguiente para mi aplicación de estadísticas / contador:

<?php function is_bot($user_agent) { return preg_match(''/(abot|dbot|ebot|hbot|kbot|lbot|mbot|nbot|obot|pbot|rbot|sbot|tbot|vbot|ybot|zbot|bot/.|bot//|_bot|/.bot|//bot|/-bot|/:bot|/(bot|crawl|slurp|spider|seek|accoona|acoon|adressendeutschland|ah/-ha/.com|ahoy|altavista|ananzi|anthill|appie|arachnophilia|arale|araneo|aranha|architext|aretha|arks|asterias|atlocal|atn|atomz|augurfind|backrub|bannana_bot|baypup|bdfetch|big brother|biglotron|bjaaland|blackwidow|blaiz|blog|blo/.|bloodhound|boitho|booch|bradley|butterfly|calif|cassandra|ccubee|cfetch|charlotte|churl|cienciaficcion|cmc|collective|comagent|combine|computingsite|csci|curl|cusco|daumoa|deepindex|delorie|depspid|deweb|die blinde kuh|digger|ditto|dmoz|docomo|download express|dtaagent|dwcp|ebiness|ebingbong|e/-collector|ejupiter|emacs/-w3 search engine|esther|evliya celebi|ezresult|falcon|felix ide|ferret|fetchrover|fido|findlinks|fireball|fish search|fouineur|funnelweb|gazz|gcreep|genieknows|getterroboplus|geturl|glx|goforit|golem|grabber|grapnel|gralon|griffon|gromit|grub|gulliver|hamahakki|harvest|havindex|helix|heritrix|hku www octopus|homerweb|htdig|html index|html_analyzer|htmlgobble|hubater|hyper/-decontextualizer|ia_archiver|ibm_planetwide|ichiro|iconsurf|iltrovatore|image/.kapsi/.net|imagelock|incywincy|indexer|infobee|informant|ingrid|inktomisearch/.com|inspector web|intelliagent|internet shinchakubin|ip3000|iron33|israeli/-search|ivia|jack|jakarta|javabee|jetbot|jumpstation|katipo|kdd/-explorer|kilroy|knowledge|kototoi|kretrieve|labelgrabber|lachesis|larbin|legs|libwww|linkalarm|link validator|linkscan|lockon|lwp|lycos|magpie|mantraagent|mapoftheinternet|marvin//|mattie|mediafox|mediapartners|mercator|merzscope|microsoft url control|minirank|miva|mj12|mnogosearch|moget|monster|moose|motor|multitext|muncher|muscatferret|mwd/.search|myweb|najdi|nameprotect|nationaldirectory|nazilla|ncsa beta|nec/-meshexplorer|nederland/.zoek|netcarta webmap engine|netmechanic|netresearchserver|netscoop|newscan/-online|nhse|nokia6682//|nomad|noyona|nutch|nzexplorer|objectssearch|occam|omni|open text|openfind|openintelligencedata|orb search|osis/-project|pack rat|pageboy|pagebull|page_verifier|panscient|parasite|partnersite|patric|pear/.|pegasus|peregrinator|pgp key agent|phantom|phpdig|picosearch|piltdownman|pimptrain|pinpoint|pioneer|piranha|plumtreewebaccessor|pogodak|poirot|pompos|poppelsdorf|poppi|popular iconoclast|psycheclone|publisher|python|rambler|raven search|roach|road runner|roadhouse|robbie|robofox|robozilla|rules|salty|sbider|scooter|scoutjet|scrubby|search/.|searchprocess|semanticdiscovery|senrigan|sg/-scout|shai/'hulud|shark|shopwiki|sidewinder|sift|silk|simmany|site searcher|site valet|sitetech/-rover|skymob/.com|sleek|smartwit|sna/-|snappy|snooper|sohu|speedfind|sphere|sphider|spinner|spyder|steeler//|suke|suntek|supersnooper|surfnomore|sven|sygol|szukacz|tach black widow|tarantula|templeton|//teoma|t/-h/-u/-n/-d/-e/-r/-s/-t/-o/-n/-e|theophrastus|titan|titin|tkwww|toutatis|t/-rex|tutorgig|twiceler|twisted|ucsd|udmsearch|url check|updated|vagabondo|valkyrie|verticrawl|victoria|vision/-search|volcano|voyager//|voyager/-hc|w3c_validator|w3m2|w3mir|walker|wallpaper|wanderer|wauuu|wavefire|web core|web hopper|web wombat|webbandit|webcatcher|webcopy|webfoot|weblayers|weblinker|weblog monitor|webmirror|webmonkey|webquest|webreaper|websitepulse|websnarf|webstolperer|webvac|webwalk|webwatch|webwombat|webzinger|wget|whizbang|whowhere|wild ferret|worldlight|wwwc|wwwster|xenu|xget|xift|xirq|yandex|yanga|yeti|yodao|zao//|zippp|zyborg|/./././.)/i'', $user_agent); } //example usage if (! is_bot($_SERVER["HTTP_USER_AGENT"])) echo "it''s a human hit!"; ?>

Quité un enlace al código fuente original, porque ahora lo redirige a una aplicación de alimentos.


Verificando el usuario-agente lo alertará a los bots honestos, pero no a los spammers.

Para saber qué solicitudes están hechas por bots deshonestos, tu mejor opción ( basada en el interesante estudio de este tipo ) es atrapar un evento de enfoque Javascript .

Si el evento de foco se dispara, la página casi con seguridad fue cargada por un ser humano.


Requisito previo: la referencia se establece

nivel de apache:

LogFormat "%U %{Referer}i %{%Y-%m-%d %H:%M:%S}t" human_log RewriteRule ^/human/(.*) /b.gif [L] SetEnv human_session 0 # using referrer SetEnvIf Referer "^http://yoursite.com/" human_log_session=1 SetEnvIf Request_URI "^/human/(.*).gif$" human_dolog=1 SetEnvIf human_log_session 0 !human_dolog CustomLog logs/human-access_log human_log env=human_dolog

En la página web, incrusta un /human/$hashkey_of_current_url.gif .
Si es un bot, es poco probable que tenga un conjunto de referencia (esta es un área gris).
Si golpea directamente usando la barra de direcciones del navegador, no se incluirá.

Al final de cada día, /human-access_log debería contener toda la referencia que en realidad es vista de página humana.

Para jugar seguro, el hash de la referencia del registro de apache debe coincidir con el nombre de la imagen