2009-07-08 2 views
1

Ich mache einen Trefferzähler. Ich habe eine Datenbank und ich speichere die IP und $_SERVER['HTTP_USER_AGENT']; der Besucher. Jetzt muss ich einen Filter hinzufügen, damit ich die Hits, die von Bots gemacht werden, wegräumen kann. Ich fand heraus, dass viele Bots normalerweise einige gebräuchliche Wörter in der $_SERVER['HTTP_USER_AGENT']; behalten, also mache ich gerne eine Reihe von Wörtern, die den Bot davon abhalten würden, in den Ergebnissen angezeigt zu werden.PHP/MySQL - ein Array-Filter für Bots

Hier ist, was ich habe jetzt:

while($row = mysql_fetch_array($yesterday, MYSQL_ASSOC)) { 

< - Hier muss ich einen Code, dass durch eine Reihe laufen würde und prüfen Sie, wenn es die Schlüsselwörter containts und wenn es nicht der Fall ist .. Zählen Sie einfach ++; ->

} 

Auch wenn Sie irgendeine andere Art und Weise kennen zu erkennen und die Bots aus den Ergebnissen zu entfernen, würde ich verry dankbar sein. Prost

+0

Eine andere Möglichkeit, dies zu tun, ist das Filtern der Ergebnisse mit SQL, so dass Sie in Ihrem Code keine Filterung vornehmen müssen. Du müsstest die Leistung testen – rojoca

Antwort

1

Schleife durch das Array von Wörtern mit foreach und prüfen, ob das aktuelle Wort existiert in der UA-String strpos() mit:

foreach ($words as $word) { 
    if (strpos($row['user_agent'], $word) !== FALSE) { 
     // word exists in string 
    } 
} 
0

Es gibt bestimmte Systeme, die versuchen, halb-aktuelle DB von bekannten bot Strings, wie CubeCart und oscommerce vor zu unterstützen. Sie tun dies, um eine boolesche Funktion zu haben, die einen Benutzer in Echtzeit vom Bot aus filtert, und zwar durch einen String-Vergleich der User-Agent-Zeichenkette mit einer Datei namens spiders.txt. Nach dem Entdecken eines Bot, deaktivieren sie Warenkorb und Login-Funktionalität usw.

Hier ist die neueste Spinnen.txt Inhalt:

Abacho abcdatos ABCSearch Acoon adsarobot aesop ah-ha alkalinebot almaden altavista antibot anzwerscrawl aol Suche appie arachnoidea Araneo Archi ariadne arianna jeeves fragen aspseek asteri als astraspider atomz augurfind backrub baiduspider bannana_bot BBOT bdcindexer blindekuh boitho Boito borg-bot bsdseek christcrawler computer_and_automation_research_institute_crawler coolbot Kosmos Crawler Crawler @ schnell crawlerboy Kreuzer cusco Überwachung deepindex denmex dittospyder docomo dogpile dtSearch elfinbot gesamte Web esismartspider exalead erregen ezresult schnell schnell webcrawler FDSE felix fido findwhat finnische Glühwürmchen FirstGov flauschigen freecrawl frooglebot Galaxie gaisbot geckobot gencrawler Geobot gigabot girafa GoClick goliat Googlebot griffon gromit grub-Client gulliver gulper henrythemiragorobot Heimatstadt HotBot htdig hubater ia_archiver ibm_planetwide iitrovatore-setaccio incywincy incrawler indy infonavirobot Infoseek ingrid inspectorwww IntelliSeek InternetSeer ip3000.com-Crawler iron33 jcrawler jeeves Jubii Kanoodle KAPITO kit_fireball kit-Feuerkugel ko_yappo_robot kototoi lachesis larbin Beine Linkwalker lnspiderguy look.com lycos mantraagent markwatch maxbot mercator merzscope meshexplorer metacr awler Miragos mnogosearch Moget Motor muscatferret nameprotect nationaldirectory naverrobot nazilla NCSA beta netnose netresearchserver ng/1.0 northerlights npbot nttdirectory_robot nutchorg nzexplorer ODP openbot Openfind osis-Projekt Ouvertüre perlcrawler phpdig pjspide polybot pompös poppi portalb psbot quepasacreep rabot Raven RHCS robi robocrawl Robozilla roverbot Roller scrubby search.ch search.com.ua searchfeed searchspider searchuk seventwentyfour sidew inder sightquestbot skymob schlankes slider_search Schlürfausführung solbot speedfind schnelle spida spider_monkey spiderku stackrambler steeler suchbot suchknecht.at-robot Suntek szukacz surferf3 surfnomore surveybot suzuran synobot Tarantel Teomaa gent teradex t-h-u-n-d-e-r-s-t-O-n-e tigersuche topiclink Toutatis tracerlock turnitinbot tutorgig uaportal uasearch.kiev. ua uksearcher Ultraseek Unitek vagabondo verygoodsearch Vivisimo voilabot voyager vscooter w3index w3c_validator wapspider wdg_validator webcrawler webmasterresourcesdirectory webmoose websearchbench webspinne whatuseek whizbanglab Winona Draht wotbox wscbot www.webwombat.com.au xenu verbinden sleuth xyro yahoobot yahoo! schlürfen yandex yellopet-Spinne Zao/0 zealbot zippy zyborg

solange man nicht wie this Cloaking tun, du bist ok.

7

Mit Dimitar Christoff Liste mit diesem Skript endete:

function isBot($user_agent){ 
    $bots = array('bingbot', 'msn', 'abacho', 'abcdatos', 'abcsearch', 'acoon', 'adsarobot', 'aesop', 'ah-ha', 
      'alkalinebot', 'almaden', 'altavista', 'antibot', 'anzwerscrawl', 'aol', 'search', 'appie', 'arachnoidea', 
      'araneo', 'architext', 'ariadne', 'arianna', 'ask', 'jeeves', 'aspseek', 'asterias', 'astraspider', 'atomz', 
      'augurfind', 'backrub', 'baiduspider', 'bannana_bot', 'bbot', 'bdcindexer', 'blindekuh', 'boitho', 'boito', 
      'borg-bot', 'bsdseek', 'christcrawler', 'computer_and_automation_research_institute_crawler', 'coolbot', 
      'cosmos', 'crawler', '[email protected]', 'crawlerboy', 'cruiser', 'cusco', 'cyveillance', 'deepindex', 'denmex', 
      'dittospyder', 'docomo', 'dogpile', 'dtsearch', 'elfinbot', 'entire', 'web', 'esismartspider', 'exalead', 
      'excite', 'ezresult', 'fast', 'fast-webcrawler', 'fdse', 'felix', 'fido', 'findwhat', 'finnish', 'firefly', 
      'firstgov', 'fluffy', 'freecrawl', 'frooglebot', 'galaxy', 'gaisbot', 'geckobot', 'gencrawler', 'geobot', 
      'gigabot', 'girafa', 'goclick', 'goliat', 'googlebot', 'griffon', 'gromit', 'grub-client', 'gulliver', 
      'gulper', 'henrythemiragorobot', 'hometown', 'hotbot', 'htdig', 'hubater', 'ia_archiver', 'ibm_planetwide', 
      'iitrovatore-setaccio', 'incywincy', 'incrawler', 'indy', 'infonavirobot', 'infoseek', 'ingrid', 'inspectorwww', 
      'intelliseek', 'internetseer', 'ip3000.com-crawler', 'iron33', 'jcrawler', 'jeeves', 'jubii', 'kanoodle', 
      'kapito', 'kit_fireball', 'kit-fireball', 'ko_yappo_robot', 'kototoi', 'lachesis', 'larbin', 'legs', 
      'linkwalker', 'lnspiderguy', 'look.com', 'lycos', 'mantraagent', 'markwatch', 'maxbot', 'mercator', 'merzscope', 
      'meshexplorer', 'metacrawler', 'mirago', 'mnogosearch', 'moget', 'motor', 'muscatferret', 'nameprotect', 
      'nationaldirectory', 'naverrobot', 'nazilla', 'ncsa', 'beta', 'netnose', 'netresearchserver', 'ng/1.0', 
      'northerlights', 'npbot', 'nttdirectory_robot', 'nutchorg', 'nzexplorer', 'odp', 'openbot', 'openfind', 
      'osis-project', 'overture', 'perlcrawler', 'phpdig', 'pjspide', 'polybot', 'pompos', 'poppi', 'portalb', 
      'psbot', 'quepasacreep', 'rabot', 'raven', 'rhcs', 'robi', 'robocrawl', 'robozilla', 'roverbot', 'scooter', 
      'scrubby', 'search.ch', 'search.com.ua', 'searchfeed', 'searchspider', 'searchuk', 'seventwentyfour', 
      'sidewinder', 'sightquestbot', 'skymob', 'sleek', 'slider_search', 'slurp', 'solbot', 'speedfind', 'speedy', 
      'spida', 'spider_monkey', 'spiderku', 'stackrambler', 'steeler', 'suchbot', 'suchknecht.at-robot', 'suntek', 
      'szukacz', 'surferf3', 'surfnomore', 'surveybot', 'suzuran', 'synobot', 'tarantula', 'teomaagent', 'teradex', 
      't-h-u-n-d-e-r-s-t-o-n-e', 'tigersuche', 'topiclink', 'toutatis', 'tracerlock', 'turnitinbot', 'tutorgig', 
      'uaportal', 'uasearch.kiev.ua', 'uksearcher', 'ultraseek', 'unitek', 'vagabondo', 'verygoodsearch', 'vivisimo', 
      'voilabot', 'voyager', 'vscooter', 'w3index', 'w3c_validator', 'wapspider', 'wdg_validator', 'webcrawler', 
      'webmasterresourcesdirectory', 'webmoose', 'websearchbench', 'webspinne', 'whatuseek', 'whizbanglab', 'winona', 
      'wire', 'wotbox', 'wscbot', 'www.webwombat.com.au', 'xenu', 'link', 'sleuth', 'xyro', 'yahoobot', 'yahoo!', 
      'slurp', 'yandex', 'yellopet-spider', 'zao/0', 'zealbot', 'zippy', 'zyborg', 'mediapartners-google' 
       ); 
    $user_agent = strtolower($user_agent); 
    foreach($bots as $bot){ 
     if(strpos($user_agent, $bot) === true){ 
      return true; 
     } 
    } 
    return false; 
} 
+0

wer hat diese schreckliche Liste gemacht? einer der beliebtesten Bot ist nicht hier: mediapartners-google, aka adsense und andere auch – dynamic

+0

@ yes123, danke fürs merken. Sie sind sehr willkommen, mehr Bots vorzuschlagen, ich werde den Beitrag bearbeiten. –

+1

Kurze gemeinsame Strings wie "aol", "web", "link", "msn", "beta", "motor" sind wahrscheinlich nicht sicher für das Filtern von Bots. Wörter, nach denen andererseits sicher gefiltert werden kann, sind '' bot ',' spider ',' crawl', was mindestens die Hälfte der Einträge in der Liste unnötig macht. –

1

Und warum nicht?

$bots=array('google', 'bing', 'yahoo', 'bot', 'crawler', 'baiduspider'); 
if(!preg_match('/('.join('|', $bots).')/is', $_SERVER['HTTP_USER_AGENT'])){ 
    //record to db code 
} 
+1

'google, bing, yahoo' ist in der Liste unnötig, da sie von' bot' gezielt werden. Ich würde empfehlen, "Crawler" zu "Crawl" und "Baiduspider" zu "Spider" zu ändern. –