Détecter les gentils robots pour bannir les mechants robots

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 591 fois - Téléchargée 17 fois

Contenu du snippet

Bonjour,

Tout d'abord, ceci est mon premier code publié, je ne sais pas s'il fonctionne, je n'ai pas encore eu l'occasion de le tester et je ne sais pas si mes postulats sont bons.

Le but de ce code est de détecter les gentils robots (comme les robots de google pour le référencement) pour exclure/bannir les autres.

Attention: Le code suivant est basé sur les postulats suivants (je ne sais pas s'ils sont valables... si un expert passe par la et s'il peut faire des commentaires la dessus, ce serait bien!)
1. Les robots de référencement (les gentils robots) vont automatiquement chercher votre fichier "robot.txt" à la racine de votre site.
2. Les robots vont très vite (plus vite qu'un humain) pour afficher les pages.
3. Un gentil robot ne va pas visiter une page qu'on lui a interdite dans notre fichier "robot.txt".
4. Un gentil robot va suivre (obligatoirement) les liens dans la page web s'ils ne sont pas interdit dans "robot.txt".

Les 2 pages dont je vais parler sont des pages dissimulées, accessibles par un lien sur un gif invisible de 1 pixel sur 1 pixel (autrement dit, il faut pas avoir de bol pour qu'un utilisateur humain clique dessus!)
- Sur toutes la pages du site, un lien mène à ces pages
- Une page (et une seule) est interdite dans le fichier robot.txt

Avec ces postulats, je peux dire que dans un laps de temps donné (on va dire 5mn):
- Un robot qui visite une page interdite est un mauvais robot (pour ça, il existe déjà des codes sources (meme sur ce site je crois))
- Un robot qui ne visite ni une page interdite ni une page autorisée (toutes les deux dissimulées) pendant un laps de temps de xx minutes (5mn dans mon code) et qui fait xx requetes pendant ce laps de temps est un mauvais robot (en gros, le robot a été programmé pour n'atteindre que certaines pages de votre site).
- Un robot qui ne visite pas la page interdite mais qui visite la page autorisée s'identifie comme un gentil robot.

A chaque fois qu'on vérifie le comportement du robot, on supprime les entrées anterieures à 5mn pour ne pas bannir par la suite un utilisateur gentil qui aurait récupéré une IP bannie...

Source / Exemple :


<?php

/* Commentaires
page 1.html = page interdite par robot.txt et lien caché
Sur page 1.html, la variable $page=1;

page 2.html = page autorisée mais lien caché
Sur page 2.html, la variable $page=2;

Table qui sert à ça (à créer):
ip_ban => ip,1,2,status,requests,timestamp ou "ip,1,2...." sont les noms des champs

  • /
//--- Le code suivant est à insérer sur toutes les pages du site. ---\\ // définition des attributs pages 1 et 2 if($page==1) { $un="Y"; } else { $un="N"; } if($page==2) { $deux="Y"; } else { $deux="N"; } // Récupération IP. $ip=$_SERVER['REMOTE_ADDR']; // Définition du temps du bannissement (modifiable à souhait)! $ban_time=300 // correspond à 5mn en secondes (5*60) // Récupération du timestamp actuel: $timestamp=time(); // Limite du bannissement $ban_limit=$timestamp-$ban_time; // maximum de requetes $max_requests=100; // Connection MYSQL (à customiser selon vos propres paramètres! include("Connections/Annuaire.php"); /* On supprime toutes les entrées de la table dont le timestamp est inferieur à 5mn du timestamp actuel (il ne s'agit pas de bloquer l'accès a des personnes qui récupereraient une ip bannie en se connectant!)
  • /
mysql_query("DELETE FROM ip_ban WHERE ip_ban.timestamp<='$ban_limit'"); // Vérification si IP du visiteur est déjà dans notre base: $verif=mysql_query("SELECT ip,1,2,status,requests,timestamp FROM ip_ban WHERE ip_ban.ip='$ip'"); $count=mysql_num_rows($verif); $data_ip_ban=mysql_fetch_array($verif); // Si count<>0 alors on vérifie si l'ip est bannie, si oui, on n'affiche pas le contenu de la page demandée if($count==0) { mysql_query("INSERT INTO ip_ban VALUES('$ip','$un','$deux','OK','1','$timestamp')"); } else { $table_un=$data_ip_ban['1']; $table_deux=$data_ip_ban['2']; $table_status=$data_ip_ban['status']; $table_requests=$data_ip_ban['requests']; $table_timestamp=$data_ip_ban['timestamp']; if($table_un=="Y" || ($table_un=="N" & $table_deux=="N" && $table_requests<$max_requests)) { echo "vilain robot!!!!" // et on n'en profite pour ne pas afficher la page! } else { // on incrémente le nombre de requêtes // on remet a jour la valeur du timestamp $table_requests=$table_requests+1; if($table_un=="N" & $un=="Y") { mysql_query("UPDATE ip_ban SET 1="Y",requests='$table_requests', timestamp='$timestamp' WHERE ip_ban.ip='$ip'"); } if($table_deux=="N" & $deux=="Y") { mysql_query("UPDATE ip_ban SET 2="Y",requests='$table_requests', timestamp='$timestamp' WHERE ip_ban.ip='$ip'"); } // ICI LE CONTENU DE VOTRE SITE! } } ?>

Conclusion :


Voila... Je rappelle que je ne suis pas sur de mes postulats ni de ma méthode...

Des questions/commentaires/suggestions...? Je suis preneur!
Merci d'avoir passé un peu de votre temps à lire ce petit algorythme

A voir également

Ajouter un commentaire

Commentaires

Messages postés
146
Date d'inscription
vendredi 28 mai 2010
Statut
Membre
Dernière intervention
21 juillet 2013
3
###FILTRE CONTRE ROBOTS DES PIRATES ET ASPIRATEURS DE SITE WEB
RewriteEngine On
## EXCEPTION: TOUS LES ROBOTS MEMES ANONYMES OU BANNIS PEUVENT ACCEDER A CES FICHIERS
RewriteCond %{REQUEST_URI} !^robots.txt
##
RewriteCond %{HTTP_USER_AGENT} ^-?$ [OR] ## ANONYMES
RewriteCond %{HTTP_USER_AGENT} ^[bcdfghjklmnpqrstvwxz\ ]{8,}|^[0-9a-z]{15,}|^[0-9A-Za-z]{19,}|^[A-Za-z]{3,}\ [a-z]{4,}\ [a-z]{4,} [OR] ## CEUX QUI INVENTENT DES NOMS AU HASARD
RewriteCond %{HTTP_USER_AGENT} 2icommerce|@nonymouse|Accoona|ActiveTouristBot|adressendeutschland|ADSARobot|Advanced\ Email\ Extractor|agent|ah-ha|aipbot|aktuelles|Alexibot|Alligator|AllSubmitter|almaden|amzn_assoc|anarchie|anonymous|Apexoo|Aqua_Products|Art-Online|ASPSeek|ASSORT|asterias|ATHENS|AtHome|Atomz|attach|autoemailspider|autohttp|BackDoorBot|BackWeb|Badass|Baiduspider|Bandit|BatchFTP|bdfetch|BecomeBot|berts|big.brother|Bitacle|Biz360|Black.Hole|BlackWidow|bladder\ fusion|BlogPeople|blogsearchbot-martin|Blogshares\ Spiders|Blog\ Checker|Bloodhound|BlowFish|bmclient|Board\ Bot|Bookmark\ search\ tool|Boston\ Project|BotALot|BotRightHere|Bot\ mailto:craftbot@yahoo.com|BravoBrian\ SpiderEngine\ MarcoPolo|Bropwers|Browsezilla|BuiltBotTough|Bullseye|bumblebee|BunnySlippers|c-spider|capture|Cegbfeieh|CFNetwork|charlotte/|CheeseBot|CherryPicker|ChinaClaw|CICC|clipping|compatible\ \;|Convera|Copernic|CopyRightCheck|cosmos|Crescent|Crescent\ Internet|Custo|cyberalert|Cyberz|DataCha0s|Daum|Deweb|diagem|Digger|Digimarc [NC,OR] ## VRAIS ET FAUX ROBOTS NE RESPECTANT PAS LES REGLES
RewriteCond %{HTTP_USER_AGENT} digout4uagent|DIIbot|DirectUpdate|disco|DISCoFinder|DittoSpyder|DnloadMage|Download|Downloader|Download\ Accelerator|Download\ Demon|Download\ Wonder|dragonfly|DreamPassport|Drip|DSurf|DSurf15a|DTS.Agent|DTS\ Agent|dumbot|DynaWeb|e-collector|EasyDL|EBrowse|eCatch|echo\ extense|ecollector|edgeio|efp@gmx\.net|EirGrabber|EmailCollector|EmailSiphon|EmailWolf|Email\ Extractor|Email\ Siphon|EmeraldShield|Enterprise_Search|EroCrawler|ESurf|Eval|Everest-Vulcan|Exabot|Express\ WebPictures|Extractor|ExtractorPro|EyeNetIE|FairAd|fastlwspider|FavOrg|Favorites\ Sweeper|fetch|FEZhead|FileHound|findlinks|Flaming\ AttackBot|flashget|FlickBot|fluffy|Foobot|Forex|Franklin\ Locator|FreshDownload|frontpage|FSurf|Gaisbot|GalaxyBot|Gamespy_Arcade|Generic|genieBot|GetBot|Getleft|GetRight|GetSmart|GetWeb!|GetWebPage|gigabaz|Girafabot|Go!Zilla|go-ahead-got-it|GOFORITBOT|GornKer|Grabber|GrabNet|Grafula|Green\ Research|grub-client|grub\ crawler|hanzoweb|Harvest|Hatena\ Antenna|heritrix|hhjhj@yahoo|hloader|HMView|holmes [NC,OR] ## VRAIS ET FAUX ROBOTS NE RESPECTANT PAS LES REGLES
RewriteCond %{HTTP_USER_AGENT} HomePageSearch|HooWWWer|HouxouCrawler|HTTPConnect|httpdown|HTTPGet|HTTPRetriever|http\ generic|HTTrack|humanlinks|ia_archive|IBM_Planetwide|iCCrawler|ichiro|id-search|IDBot|iGetter|imagefetch|Image\ Stripper|Image\ Sucker|imds_monitor|IncyWincy|Industry\ Program|Indy\ Library|InetURL|InfoNaviRobot|informant|Ingelin|InstallShield\ DigitalWizard|InterGET|InternetLinkAgent|InternetSeer\.com|Internet\ Ninja|IPiumBot|Iria|IRLbot|Iron33|Irvine|ISSpider|IUPUI\ Research\ Bot|Jakarta\ Commons|JBH*Agent|JBH\ Agent|JennyBot|JetCar|JetCar|jeteye|jeteyebot|JoBo|JOC\ Web\ Spider|JustView|Kapere|Kenjin|Keyword\ Density|KRetrieve|ksoap|KWebGet|Lachesis|LapozzBot|larbin|LeechFTP|leipzig.de|LexiBot|lftp|LightningDownload|likse|Link*Sleuth|LinkextractorPro|Linkie|LinkScan|LINKS\ ARoMATIZED|linktiger|LinkWalker|lmcrawler|LNSpiderguy|LocalcomBot|looksmart|Mac\ Finder|Mag-Net|Magnet|Mail\ Sweeper|mark.blonin|MaSagool|Mass\ Downloader|Mata\ Hari|MCspider|MetaProducts\ Download\ Express [NC,OR] ## VRAIS ET FAUX ROBOTS NE RESPECTANT PAS LES REGLES
RewriteCond %{HTTP_USER_AGENT} Microsoft\ Data|Microsoft\ Data\ Access|Microsoft\ URL|Microsoft\ URL\ Control|MIDown|MIDown\ tool|MIIxpc|minibot\(NaverRobot\)|Mirror|Missauga|Missigua|Missouri\ College\ Browse|Mister|Mister\ PiX|MJ12bot|mkdb|MMMtoCrawl\/UrlDispatcherLLL|moget|Monster|Moozilla|Moreoverbot|mothra/netscan|MovableType|Movable\ Type|Mozi!|Mozilla/22|Mozilla/3.0\ \(compatible\)|Mozilla/5.0\ \(compatible\;\ MSIE\ 5.0\)|MSIECrawler|MSIE_6.0|MSProxy|multithreaddb|Murzillo|MVAClient|MyFamilyBot|MyGetRight|nameprotect|NASA\ Search|nationaldirectory|Naver|Navroad|NearSite|NetAnts|netattache|NetCarta|NetMechanic|netprospector|NetResearchServer|NetSpider|NetZIP|NetZippy|NetZip\ Downloader|Net\ Vampire|NEWT|Nextopia|nicerspro|NimbleCrawler|ninja|noxtrumbot|NPBot|Nutch|Nutscrape/|Octopus|Offline\ Explorer|Offline\ Navigator|OK\ Mozilla|OmniExplorer|OpaL|OpaL|Openbot|Openfind|OpenTextSiteCrawler|Oracle\ Ultra\ Search|OrangeBot|PackRat|PageGrabber|PagmIEDownload|panscient|Papa\ Foto|Papa\ Foto|pavuk|pcBrowser|PerMan [NC,OR] ## VRAIS ET FAUX ROBOTS NE RESPECTANT PAS LES REGLES
RewriteCond %{HTTP_USER_AGENT} PersonaPilot|PHP\ version|PingALink|PlantyNet_WebRobot|playstarmusic|Plucker|Pockey|Port\ Huron|Program\ Shareware|Progressive\ Download|ProPowerBot|prospector|ProWebWalker|Proxy|Prozilla|psbot|PSurf|psycheclone|puf|Pump|PushSite|PussyCat|PuxaRapido|PycURL|QRVA|QuepasaCreep|QueryN|Radiation|RealDownload|Reaper|Recorder|RedCarpet|RedKernel|ReGet|relevantnoise|replacer|RepoMonkey|RMA|Robozilla|Rover|RPT-HTTPClient|RTG30|Rufus|SAPO|SBIder|scooter|ScoutAbout|script|SearchExpress|searchhippo|searchpreview|searchterms|Second\ Street\ Research|Seekbot|Seeker|Serious|Shai|shelob|Shim-Crawler|SickleBot|sitecheck|SiteMapper|SiteSnagger|Slurpy\ Verifier|SlySearch|SlySearch|SmartDownload|sna-|snagger|So-net|sogou|sootle|SpaceBison|SpankBot|spanner|SpeedDownload|Spegla|Sphere|Sphider|SpiderBot|sproose|Sqworm|SQ\ Webscanner|Stamina|Stanford|Star\ Downloader|Stripper|studybot|sucker|SuperBot|SuperHTTP|Surfbot|SurfWalker|SurveyBot|suzuran|Szukacz|tAkeOut|TALWinHttpClient|tarspider|Teleport|Teleport\ Pro [NC,OR] ## VRAIS ET FAUX ROBOTS NE RESPECTANT PAS LES REGLES
RewriteCond %{HTTP_USER_AGENT} Telesoft|Templeton|TestBED|TheNomad|The\ Intraformant|TightTwatBot|Titan|toCrawl/UrlDispatcher|TrackBack|TrueRobot|True_Robot|Turing|TurnitinBot|TV33_Mercator|Twisted\ PageGetter|UCmore|UdmSearch|UIowaCrawler|UMBC|UniversalFeedParser|URLGetFile|URLy\ Warning|URL\ Control|URL_Spider_Pro|UtilMind|Vacuum|vagabondo|vayala|visibilitygap|vobsub|VoidEYE|VoilaBot|voyager|vspider|W3CRobot|w3mir|Web\ Image\ Collector|Web2WAP|WebaltBot|WebAuto|webbandit|WebCapture|Webclipping|webcollage|webcollector|WebCopier|WebCopy|webcraft@bea|webdevil|webdownloader|Webdup|WebEMailExtrac.*|WebEnhancer|WebFetch|WebFilter|WebFountain|WebGo|WebHook|Webinator|WebLeacher|WEBMASTERS|WebmasterWorldForumBot|WebMiner|WebMirror|webmole|WebReaper|WebSauger|WEBsaver|Website|Website\ eXtractor|Website\ Quester|WebSnake|Webster|WebStripper|websucker|webvac|webwalk|webweasel|WebWhacker|WebZip|Web\ Data\ Extractor|Web\ Downloader|Web\ Image\ Collector|Web\ Sucker|web\.by\.mail|Wells\ Search|WEP\ Search\ 00 [NC,OR] ## VRAIS ET FAUX ROBOTS NE RESPECTANT PAS LES REGLES
RewriteCond %{HTTP_USER_AGENT} WeRelateBot|whizbang|WhosTalking|Widow|Widows|Wildsoft\ Surfer|WinHttpRequest|WinHTTrack|WISEbot|WISEnutbot|WUMPUS|Wweb|WWW-Collector|WWWOFFLE|wwwster|Wysigot|x-Tractor|Xaldon|Xenu\'s|Xenus|XGET|Y!TunnelPro|YaDirectBot|YahooYSMcm|Yandex|Yeti|Zade|ZBot|zerxbot|Zeus|Zeus.*Webster|ZyBorg|^adwords|^Internet\ Explorer|^Mozilla$|^MSIE|^puf|^user|^User-Agent:\ |^User\ Agent:\ |^<sc|<\? [NC,OR] ## VRAIS ET FAUX ROBOTS NE RESPECTANT PAS LES REGLES
RewriteCond %{HTTP_USER_AGENT} ^curl|^Fetch\ API\ Request|GT\:\:WWW|^HTTP\:\:Lite|httplib|^Java/1.|^Java\ 1.|^LWP|libWeb|libwww|^PEAR|PECL\:\:HTTP|PHPCrawl|^Program\ Shareware|python|Rsync|Snoopy|^URI\:\:Fetch|WebDAV|^Wget [NC] ## CETTE LISTE BLOQUE 80% DES ROBOTS SPAMMEURS. IL FAUT LA CONSERVER.
RewriteRule (.*) - [F]
Messages postés
192
Date d'inscription
lundi 24 décembre 2001
Statut
Membre
Dernière intervention
3 février 2010

Bonne idée la source, mais quelques souci ...

Déjà, essaye de faire une class, ceci serait plus propre.
Personnellement, je n'aurais pas utiliser une base sql pour ça, vu qu'on ne bannit pas plus de 200 robots par jour, je trouve que c'est utiliser de la ressource pour peut de choses, utilise un simple fichier texte (en json par exemple).
Sinon je pense aussi qu'il y a beaucoup plus simple pour bannir ...

Bonne continuation ...

PS : Tous ça n'es que mon point de vue ...
Messages postés
12
Date d'inscription
dimanche 8 octobre 2006
Statut
Membre
Dernière intervention
29 octobre 2008

Pour Google le problème est réglé : il suit le contenu du fichier robot.txt qui se trouve à la racine. ;)

De ce fait, si on lui interdit de visiter le site il repart. C'est précisé dans les outils pour webmaster de Google. Mieux que ça, il demande à ce qu'il soit présent.
Messages postés
4
Date d'inscription
jeudi 17 janvier 2008
Statut
Membre
Dernière intervention
31 janvier 2009

Bonjour MangaII,

"En effet, les méchants bots vont scanner tout le site, très vite sans trop s'inquiéter du robots.txt !"
=> Oui, c'est pour ça que je compte le nombre de requetes sur un moment donné.

"Par contre, les gentils robots (notemment google) ne fonctionnent pas tout a fait comme ça."
=> Zut... Ne peut-on pas forcer d'une façon ou d'une autre le robot google à visiter une page précise. Par exemple, dans le fichier robots.txt on la la syntaxe suivante: "disalow..." Ne peut-on pas utiliser une fonction du type "follow..." ou "visit..."...?

Pour les updates, je vais mettre le code a jour bientôt! Merci pour vos conseils a tous les deux et merci pour le bout de code de mise à jour!

Anto
Messages postés
129
Date d'inscription
dimanche 9 décembre 2001
Statut
Membre
Dernière intervention
12 janvier 2009

Bonjour,

l'idée est sympa, mais j'emet un doute sur le postula de départ !
En effet, les méchants bots vont scanner tout le site, très vite sans trop s'inquiéter du robots.txt !
Par contre, les gentils robots (notemment google) ne fonctionnent pas tout a fait comme ça.
Déjà, il ralentissent leurs progressions au sein du site pour ne par faire trop de requettes trop vite et donc ne pas être assimilés à de mauvais bots !
De plus, il n'est pas certain que google scanne toutes les pages de ton site ! Il viendra forcément sur la page d'accueil, mais pour le reste ... ce n'est pas garanti, et même il suivra en priorité les liens qui lui paraissent importants (ex : menus, liens sur des H1 ...) ! de là à ce qu'il scanne une page en lien sur un gif de 1x1 px, c'est une autre histoire ...

En gros, l'idée de google est justement de se faire passer pour un humain !

Pour ce qui est de mysql, je rejoins IRCLAND, tu peux remplacer les 4 UPDATE de la fin en 1 seul ...

# if($table_un=="N" & $un=="Y")
# $un = ", `1`='Y' ";
#
# if($table_deux=="N" & $deux=="Y")
# $deux = ", `2`='Y' ";
#
# mysql_query("UPDATE `ip_ban` SET `requests`='$table_requests', `timestamp`='$timestamp' $un $deux WHERE `ip`='$ip'");

On pourrai encore simplifier, mais bon ... c'est déjà un début

A titre info, il existe déjà des blacklist d'ip de méchants bots ...
Afficher les 7 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.