begin process at 2010 02 10 02:49:02
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Sécurité & Cryptage

 > DÉTECTER LES GENTILS ROBOTS POUR BANNIR LES MECHANTS ROBOTS

DÉTECTER LES GENTILS ROBOTS POUR BANNIR LES MECHANTS ROBOTS


 Information sur la source

Note :
5 / 10 - par 1 personne
5,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Sécurité & Cryptage Classé sous :robots, détection, bannir, référencement, robotstxt Niveau :Débutant Date de création :09/10/2008 Date de mise à jour :13/10/2008 17:53:01 Vu :4 232

Auteur : Anto1982

Ecrire un message privé
Commentaire sur cette source (6)
Ajouter un commentaire et/ou une note

 Description

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

  • <?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!
  • }
  • }
  • ?>
<?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


 Historique

09 octobre 2008 18:31:04 :
il me manquait un point virgule quelque part.
13 octobre 2008 17:53:01 :
Réduction des requetes MySQL ;-) Suppression de quelques commentaires qui faisaient doublons avec la description.

 Sources de la même categorie

ALGORITHME DE CÉSAR SUR LA TABLE ASCII par Nementon
Source avec une capture CODEC D'OBFUSCATION DE LIEN HTML (PHP5) par masternico
GÉRER UN .HTPASSWD par coockiesch
Source avec Zip SERSESSIONS > CLASS PHP5 POUR GERER LES SESSIONS SIMPLEMENT par Astalavista
Source avec Zip PROTECTION CONTRE LES FAILLES CSRF : CROSS SITE REQUEST FORG... par aKheNathOn

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture ANTI ASPIRATEUR DE SITE (ENCORE UN MAIS DIFFERENT ) par dydjy940
Source avec Zip LOG DES ROBOTS QUI PASSENT SUR LE SITE par etiennexxx9
BANNIR UN UTILISATEUR PAR COOKIE par p3x
Source avec Zip ANTI-FLOOD PAR WORDLIST ET QUESTION ALÉATOIRE par grobs
RETRACER LES ROBOTS DE GOOGLE par Toolsweb

Commentaires et avis

Commentaire de ircland le 10/10/2008 16:43:40

Bonjour,

je ne peux pas confirmé tes postula mais ils ont du sens d'après moi. Je n'ai pas testé ta source mais en partant je voye qu'il va avoir un problème majeur... Tu a vu le nombre de requete mysql tu fais ? Tu as 3-4-5-6 visiteurs en meme temps, 1 bots, 2 au max... Et en plus dans tes codes de page il a surment d'autre requete Donc tu joue avec le feu, tes pages seront plus lent a affiché a cause du serveur mysql qui sera relanti et etc... tu devrais essayé de tt faire en local sur un fichier dans ta racine de ton compte...  pas dans la racine de ton site...  public_html/ ou www/ ...

Et aussi je remarque que tu peux reduire le nombre de requete en gardant le bon fonctionnement... tu peux faire 2 requete d'update en meme temps tu n'est pas oubligé de faire 2x une requete d'update back to back

Commentaire de petifa le 11/10/2008 14:14:15

une petite remarque, les commentaires c'est bien mais il ne faut pas non plus mettre des romans dans le code. il faut aller à l'essentiel

Commentaire de MangaII le 13/10/2008 09:34:52 5/10

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 ...

Commentaire de Anto1982 le 13/10/2008 14:12:28

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

Commentaire de AlphaOrionis le 16/11/2008 20:22:16

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.

Commentaire de Astalavista le 26/02/2009 15:13:34

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 ...

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

PHP et le référencement [ par DreamPush ] Connaissant les mécanismes qui font marcher le référencement en HTML, je me demande, avant une refonte totale de mon site en PHP, comment fonctionne l Active scripting : détection possible? [ par paprikarmasutra ] Salut à tous,Voilà je cherche un moyen pour détecter si chez le client l'active scripting est activé ou non, auquel cas j'affiche tel ou tel code.Je r ignorer les ip's de robots indexeurs [ par pyranhaz ] Bonjour,J'aimerais savoir si ce bout de code pourrait indiquer de ne pas bannir le robot si son ip existe dans la bddc'est important pour le référence BANNIR IP [ par Wars007 ] Salut qqun aurais un code php pour bannir une ip???PS:si vous vous y connaissez peut on faire par exemple:------ip.txt--------23.23.23.2324.24.24.24-- BANNIR IP DUN CHAT URGENT [ par Wars007 ] salut je voudrais savoir un code php pour bannir une simple adresse ip dun chat sans connecion mysql.merci :)PS:(je ve le bannir car il floof tlt!) Détection du rapport de confidentialité (Cookie) [ par MAsterC ] Salut &#224; tous,Je me demandais si&nbsp;c'&#233;tait possible de d&#233;tecter le "Rapport de confidentialit&#233;" quand il&nbsp;s'active sur notre Référencement [ par Vin Gazoil ] Salut a tous ! quelqu'un peut il me donner une adresse o&#249; l'on explique correctement le r&#233;f&#233;rencement ? merci d'avance Détection de passage d'adresse dans le navigateur [ par Leneuf8000 ] Bonjour, j'aurais aim&#233; savoir la mani&#232;re pour d&#233;tecter si l'utilisateur rentre une page interdite pour lui directement dans le navigate détection de robot [ par bob ] bonjour &#224; tous!j'ai chercher sur ce site et sur d'autre mais je n'arrive pas &#224; mettre la main sur un script quid&#233;tecte les robots comme Détecter une ouverture de mail [ par JeanMi66 ] Salut &#224; tous !J'ai d&#233;j&#224; post&#233; un topic sur ce forum en ce qui concerne la d&#233;tection d'ouverture de mail.On m'a dit qu'il fall


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,248 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales