Ayrı istatistikleri için insan ziyaretçiler botlar söyle?

14 Cevap php

Ben kendi basit web istatistik komut rulo arıyorum.

Yolda tek büyük engel, bildiğim kadarıyla gördüğünüz gibi, ayrı botlara karşı insan ziyaretçi anlatıyor. Ben (yani ben bot ile ilgili User-ajanlar ile metin dosyalarını güncellemek istemiyorum) düzenli olarak korumak gerekmez ki bunun için bir çözüm istiyorum.

Is there any open service that does that, like Akismet does for spam? Or is there a PHP project that is dedicated to recognizing spiders and bots and provides frequent updates?

To clarify: I'm not looking to block bots. I do not need 100% watertight results. I just want to exclude as many as I can from my stats. In know that parsing the user-Agent is an option but maintaining the patterns to parse for is a lot of work. My question is whether there is any project or service that does that already.

Bounty: Ben konuyla ilgili bir referans soru olarak bu itin düşündüm. En iyi / en özgün / en teknik açıdan katkısı ödül miktarı alırsınız.

14 Cevap

İnsanlar ve botlar benzer şeyler yapacağız, ama botlar insanlar olmadığını şeyler yapacağız. Kullanıcının bu şeyleri tanımlamak için deneyelim. Biz davranış bakmak önce, en yararlı olarak RayQuang's Yorum kabul edelim. Bir ziyaretçinin bir bot kullanıcı aracısı dizesini varsa, muhtemelen bir bot var. Ben bir şey kırma üzerinde çalışıyoruz sürece UA olarak "Google Paletli" (veya benzer bir şey) ile dolaşan görüntü kimseyi olamaz. Ben elle bir listesini güncellemek istemiyorum biliyorum, ama otomatik çekerek bu bir iyi olmalı, ve önümüzdeki 10 yıl boyunca eskiyen kalır bile, yararlı olacaktır.

Bazıları zaten Javascript ve resim yükleme belirtmiştik, ancak Google hem yapacak. Biz orada hem yapacak birkaç botlar şimdi, yani bu artık insan göstergeleri kabul gerekir. Yine benzersiz ne yapacak botlar, ancak bir "görünmez" bağlantısını izleyin. Ben bir kullanıcı olarak göremiyorum çok sinsi bir şekilde bir sayfaya bağlantı. O izledi alırsa, biz bir bot var.

Botlar sık ​​sık, olur, saygı robots.txt ama her zaman değil. Kullanıcılar robots.txt umurumda değil, ve biz muhtemelen robots.txt alınırken herkes bir bot olduğunu varsayabiliriz. Biz de, bir adım daha ileri gitmek ve robots.txt tarafından dışlanmıştır sayfalarımızda için bir kukla CSS sayfa bağlayabilirsiniz. Normal CSS yüklendi ama bizim kukla CSS değildir, kesinlikle bir bot var. Sen IP tarafından yüklerin (muhtemelen bir bellek) tablo oluşturmak ve yapmak zorunda olacak bir maçta yer alan, ama bu gerçekten çok sağlam söylemek olmamalı.

Peki, tüm bu kullanmak için: belki zaman damgası sınırlamalar, ip adresine göre botlara bir veritabanı tablosunu korumak. "Gerçek" CSS yükler ama robots.txt CSS sayar şey eklemek, sizin görünmez linki aşağıda bir şey eklemek. Belki de tüm robots.txt indirenler ekleyin. Son adım olarak kullanıcı aracısı dizesini Filtre ve hızlı bir istatistiklerini analiz yapmak ve bu yöntemleri biz botlara bildiğimiz şeyleri tanımlamak için çalışıyor gibi görünen ne kadar güçlü görmek için bu kullanmayı düşünün.

En kolay yolu kendi Yönlendiren Most do inç 'bot' veya 'örümcek' içerir olmadığını kontrol etmektir.

Yazılım işe ise başlatmak için, Javascript based, the majority of bots will be automatically stripped out botlar gibi, genellikle Javascript yok.

Bununla birlikte, sorunuzun cevabı düz bir bot listesini takip ve filtreleme listesinde kendi user-agent eklemektir.

Take a look at this bot list.

Bu user-agent list is also pretty good. Just strip out all the B's ve hazırsınız.

eSniff the above list here var tarafından yapılan EDIT: İnanılmaz iş "in a form that can be queried and parsed easier. robotstxt.org/db/all.txt Each new Bot is defined by a robot-id:XXX. You should be able to download it once a week and parse it into something your script can use" Onun yorumunda okuyabilir gibi.

Umarım yardımcı olur!

PHP (sağ yanıt başlıkları en azından içerik türü ve önbellek kontrol, ama boş bir görüntü yazmak verecek) bir CSS arka plan görüntüsü olarak kamufle komut istatistik düşünün.

Bazı botlar JS ayrıştırır, ama kesinlikle kimse CSS görüntüleri yükler. Bir tuzak-gibi ile bu textbased birlikte tarayıcıları dışarıda olacağı JS-, ama bu world wide web nüfusunun% 1'inden daha az bulunuyor. Ayrıca, JS-engelli müşterilerine daha az CSS-engelli müşterileri kesinlikle vardır (mobiles!).

Daha sağlam daha gelişmiş botlar (Google, Yahoo, vs) robots.txt (ki daha iyi botlar CSS resmin yolunu vermemek, ileride tarama olabilir (istisnasız) vaka için yapmak yine de) saygı duyacağız.

Şu anda Apasce2 için benim log dosyaları izlemek için awstats ve Webalizer kullanımı ve bugüne kadar onlar bunun çok iyi bir iş yapıyor. Eğer isterseniz bir açık kaynak projesi olarak onların kaynak koduna göz atabilirsiniz.

Sen http://awstats.sourceforge.net de kaynak almak veya alternatif SSS bakabilirsiniz http://awstats.sourceforge.net/docs/awstats_faq.html

Hope that helps, RayQuang

Aksine insan davranışlarını önermek şeyler aramak örümcek Kullanıcı Acenteleri inanılmayacak-uzun bir liste korumaya çalışırken daha. Tek sayfa-seans sayısı ve çoklu-sayfa-seans sayısı: Bu prensibi biz iki figürün içine bizim Oturum Sayısı bölünmüş olmasıdır. Biz bir oturum çerezi bırakın, ve çok sayfalı oturumları belirlemek için kullanabilirsiniz. Biz de kalıcı bir "Makine ID" çerez bırak; Onlar sadece bu oturumda bir sayfa görmek bile dönen bir kullanıcı (Makine ID cookie bulundu) çok sayfalı oturum olarak kabul edilir. Bir "insan" ziyaretçi ima diğer özelliklere sahip olabilir - yönlendirme Google, örneğin (Ben gerçekçi bir kelime ile ifade edilen bir standart UserAgent olarak MS arama bot mascarades sitesi farklı içerik [görünmüyor kontrol inanıyorum rağmen Buna] onların Bot verilmiş ve bu davranışın bir insan gibi bir çok görünüyor!)

Tabii ki bu infalible değildir ve özellikle gelmesi ve onun sizin için iyi bir istatistik olacak değil "kapalı tıklayın", ne de kurabiye insanların hakimiyeti varsa, bizim durumumuzda (kapalı bir sürü insan varsa onlar etkin oturum çerezleri) olmadan bizim [alışveriş sepeti] siteyi kullanmak mümkün olmayacaktır.

Biz günde tek oturum sayısı her yerde olduğunu bulmak müşterilerimize birinden veri alarak - günden güne farklı büyüklükte bir sipariş; Biz günde çok sayfalı oturumundan 1000 çıkarma eğer Ancak, biz daha sonra sırayla yerleştirilir / sepet başına iki oturumu başına 4 çoklu-sayfa-oturumları bir lanet-yakın-lineer oranına sahip. Ben günde diğer 1,000 çok sayfalı oturumları ne gerçek bir fikrim yok!

User-agent Denetleme spam botlara dürüst sizi uyarmak, ama olmaz.

Istekleri sahtekâr botlar tarafından yapıldığı anlatmak için, en iyi bahis (based on this guy's interesting study) catch a Javascript focus event etmektir.

Odak olayı varsa, sayfa neredeyse kesinlikle bir insan tarafından yüklendi.

Edit: bu doğru, Javascript ile insanlar insan olarak görünmeyecektir kapalı, ama that's not a large percentage of web users.

Javascript kullanarak Tutanak fare hareketi ve kaydırma. Bir insan ya da bir bot var wether Sen kaydedilen verilerden söyleyebilirim. Bot gerçekten sofistike ve taklit insan fare hareketleri sürece.

Prerequisite - yönlendirme ayarlanır

apache seviyesi:

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

In web-page, embed a /human/$hashkey_of_current_url.gif.
If is a bot, is unlikely have referrer set (this is a grey area).
If hit directly using browser address bar, it will not included.

Her günün sonunda, /human-access_log gerektiği aslında insan sayfa görünümü tüm yönlendirme içerir.

Güvenli oynamak için, apache günlüğüne gelen yönlendirme karma görüntü adı ile taksitli gerekir

Eğer takip sayfalarınıza bir 1x1 gif var. Sonra yüklü ise onun bir tarayıcı olması muhtemeldir. Bu yüklü değilse, bir komut olması olasıdır.

=? Üzgünüm, yanlış. Sert / garip bir isim olmayan bir bağlantılı web sayfası oluşturmak ve bu sayfayı ziyaret ayrı oturum: Sen benim yerinde kurdunuz başka bir seçeneği deneyebilirsiniz. Tüm bu sayfaya ziyaretçinin botlar olacak ise çoğu, bu şekilde dinamik bot listesi oluşturmak mümkün olacak.

Orijinal cevap (olumsuz oy alıyorum!) Izler

The only reliable way to tell bots from humans are [CAPTCHAS][1]. You can use [reCAPTCHA][2] if it suits you.

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

Ben hiç kimse bir Turing test uygulanması tavsiye etti şaşırdım. Sadece diğer ucundaki insan ile bir sohbet kutusu var.

Bir programatic çözüm sadece yok olmaz: ne zaman PARRY Encounters the DOCTOR Ne olur bakın

Onlar da bir insan olduğunu düşünerek içine bir gerçek kişi aptal nasıl süreceğini görmek için: Bu iki karakter ''70 AI araştırma sırasında yazılmış, hem "sohbet" bot bulunmaktadır. PARRY karakter basmakalıp psikoterapist olarak bir paranoyak şizofren ve DOKTOR olarak modellenmiştir.

İşte some more background

Ayrıca isteyen bir kullanıcı aracısı gelen bütün istekleri dışlamak olabilir robots.txt. Bütün well behaved botlar böyle bir istekte bulunur, ancak kötü botlar algılama kaçış olacaktır.

Ayrıca yanlış pozitif ile ilgili sorunlar olurdu - bir insan olarak, o benim tarayıcıda a robots.txt okumanız çok sık değil, ama ben kesinlikle yapamam. Bu yanlış botlar gibi gösterilmesini önlemek için, bazı ortak bir tarayıcı Kullanıcı Ajanlar beyaz liste, ve her zaman insan olmalarını düşünebiliriz. Ama bu sadece tarayıcılar yerine botlar için biri için Kullanıcı Ajanlar bir listesini muhafaza dönüşecekti.

Yani, bu-onlar-istek-robots.txt vermedi yaklaşım kesinlikle% 100 su geçirmez bir sonuç vermez, ancak tam bir çözüm haline beslemek için bazı buluşsal sağlayabilir.

Ben benim istatistikleri / sayaç uygulaması için aşağıdakileri kullanabilirsiniz:

<?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!";
?>

I here adlı bot listesi var, ve sonra temel fonksiyonunu minimize.