====== Project HoneyPot ====== Project HoneyPot est un projet collaboratif pour aider à repérer et bloquer les spammeurs (voir ces deux articles: [[http://www.sebsauvage.net/rhaa/index.php?2011/06/27/13/17/04-project-honeypot-une-alternative-a-akismet|lien1]] [[http://sebsauvage.net/rhaa/index.php?2011/08/01/07/13/04-retour-sur-project-honeypot|lien2]]). Notez que vous n'avez pas l'obligation de participer au repérage des spammeurs. Vous pouvez juste profiter de la protection de Project Honeypot. La petite bibliothèque php suivante vous permettra de bloquer les spammeurs de votre site en utilisant Project Honeypot tout en prévenant les internautes d'une éventuelle infection de leur PC. Cela ne bloquera pas leur navigation: Ils auront la possibilité de continuer à naviguer sur le site en prouvant qu'ils sont bien des humains. ===== Installation ===== * Inscrivez-vous à [[http://www.projecthoneypot.org/|Project Honeypot]] : C'est obligatoire pour obtenir une clé d'API. La bibliothèque ci-dessous ne fonctionnera pas sans la clé. Cette inscription est gratuite. * La clé est dans votre dashboard: Une fois connecté sur le site du projet, cliquez sur "Home" > "Dashboard" et regardez "//**Your http:BL API key:**//". Recopiez cette clé dans le source ci-dessous à la place des XXXXXXXXXXXX. * Placez le fichier ci-dessous sur votre site. HTML; $ip=$_SERVER['REMOTE_ADDR']; $days = $_SESSION['httpbl']['activity']; if (httpbl_lang()=='fr') { $daysmsg=($days>1?" il y a $days jours":''); echo <<
! Votre adresse IP a été détectée comme émettant du spam$daysmsg. Il est possible que votre ordinateur soit infecté.
Merci de vous en assurer en utilisant un de ces antivirus gratuits: Microsoft Safety Scanner, HouseCall TrendMicro ou Malwarebytes AntiMalware.
Ce message s'affiche car ce site web participe à Project Honeypot pour la lutte contre le spam.
Ce message continuera à s'afficher plusieurs jours après une éventuelle désinfection de votre ordinateur.
HTML; } else { $daysmsg=($days>1?" $days days ago":''); echo <<
Your IP address has been detected as spammer$daysmsg. Your computer may be infected.
Please use one of these free antiviruses: Microsoft Safety Scanner, HouseCall TrendMicro or Malwarebytes AntiMalware.
You see this message because this website takes part in Project Honeypot to fight spam.
This message will continue to show up several days after the disinfection of your computer.
HTML; } } function httpbl_check() { $ip = $_SERVER['REMOTE_ADDR']; // build the lookup DNS query // Example : for '127.9.1.2' you should query 'abcdefghijkl.2.1.9.127.dnsbl.httpbl.org' $lookup = HTTPBL_API_KEY . '.' . implode('.', array_reverse(explode ('.', $ip ))) . '.dnsbl.httpbl.org'; // check query response $result = explode( '.', gethostbyname($lookup)); if ($result[0] == 127) { // Query successful ! $a = array('activity'=>$result[1], 'threat'=>$result[2], 'type'=>$result[3]); $typemeaning=''; if ($a['type'] & 0) $typemeaning .= 'Search Engine, '; if ($a['type'] & 1) $typemeaning .= 'Suspicious, '; if ($a['type'] & 2) $typemeaning .= 'Harvester, '; if ($a['type'] & 4) $typemeaning .= 'Comment Spammer, '; $a['typemeaning'] = trim($typemeaning,', '); // Now determine some blocking policy $a['block']=0; if ( ($a['type'] >= 4 && $a['threat'] > 0) // Comment spammer with any threat level || ($a['type'] < 4 && $a['threat'] > 20) // Other types, with threat level greater than 20 ) { $a['block'] = 1; } $_SESSION['httpbl']=$a; if ($a['block']!=0) { httpbl_logme(); httpbl_blockme(); exit(); } } } function httpbl_logme() { $log = fopen($_SERVER["DOCUMENT_ROOT"].'/httpbl.txt','a'); $stamp = date('Y-m-d :: H-i-s'); $page = $_SERVER['REQUEST_URI']; $ua = $_SERVER["HTTP_USER_AGENT"]; if (!isset($_COOKIE['notabot'])) { fputs($log,"$stamp :: BLOCKED ".$_SERVER['REMOTE_ADDR']." :: ".$_SESSION['httpbl']['type']." :: ".$_SESSION['httpbl']['threat']." :: ".$_SESSION['httpbl']['activity']." :: $page :: $ua\n"); } else { fputs($log,"$stamp :: UNBLCKD ".$_SERVER['REMOTE_ADDR']." :: $page :: $ua\n"); } fclose($log); } function httpbl_blockme() { header('HTTP/1.0 403 Forbidden'); echo ''; httpbl_infected(); echo << function setcookie( name, value, expires, path, domain, secure ) { // set time, it's in milliseconds var today = new Date(); today.setTime( today.getTime() ); if ( expires ) { expires = expires * 1000 * 60 * 60 * 24; } var expires_date = new Date( today.getTime() + (expires) ); document.cookie = name + "=" +escape( value ) + ( ( expires ) ? ";expires=" + expires_date.toGMTString() : "" ) + ( ( path ) ? ";path=" + path : "" ) + ( ( domain ) ? ";domain=" + domain : "" ) + ( ( secure ) ? ";secure" : "" ); } function letmein() { setcookie('notabot','true',1,'/', '', ''); location.reload(true); }
HTML; if (httpbl_lang()=='fr') { echo '
Pour continuer la navigation, merci de cliquer sur ce lien. Désolé du dérangement.
'; } else { echo '
Please click this link to continue. Sorry for the inconvenience.
'; } echo ''; } ?>
===== Utilisation ===== Pour protéger une application php des spammeurs, ajoutez simplement dans votre code php: require_once 'httpbl.php'; C'est tout ! Pour certaines application php, il faut parfois l'inclure après les includes de l'application elle-même, et avant l'exécution du code. Par exemple pour DokuWiki, il faut le mettre dans ''doku.php'', juste après la ligne:require_once(DOKU_INC.'inc/init.php'); Il peut également être judicieux, si l'application a de nombreuses pages, de mettre l'appel dans un des includes commun à toutes ces pages. ===== Page de blocage ===== Si une adresse IP est détectée comme suspect ou spammeur, l'internaute verra cet écran: {{ :project_honeypot_cap3.png?nolink& |}} Le message s'affiche automatiquement en français ou en anglais selon la langue du navigateur. Il suffit à l'internaute de cliquer sur le lien pour poursuivre normalement la navigation sur votre site. (Ce lien ne peut pas être suivi par les robots car il utilise Javascript.). Si le spam date de moins de 8 jours et que l'internaute est sous Windows, il verra le bandeau en haut de chaque page de votre site. ===== Logs ===== À la racine de votre site, vous pouvez consulter le fichier **httpbl.txt** qui enregistre tous les blocages et déblocage. Exemple: 2011-08-02 :: 11-08-32 :: BLOCKED 12.34.56.78 :: 5 :: 21 :: 4 :: /mapage.php :: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0 2011-08-02 :: 11-09-11 :: UNBLCKD 12.34.56.78 :: /mapage.php :: Mozilla/5.0 (Windows NT 5.1; rv:5.0) Gecko/20100101 Firefox/5.0 * La première ligne (BLOCKED) indique que l'adresse IP 12.34.56.78 a été bloquée par le système en tentant d'accéder à /mapage.php, car cette IP est marquée comme spammeur de commentaires (5) et a envoyé du spam il y a 4 jours. L'internaute n'a pas pu accéder à la page: Il ne voit que la page de blocage (ci-dessus).\\ * La seconde ligne (UNBLCKD) montre que l'internaute a cliqué sur le lien "//Merci de cliquer sur ce lien//", et que c'est donc bien un humain (et pas un robot). La page s'est rechargée normalement.\\ * Vous verrez ensuite une ligne UNBLCKD pour chaque page visitée par l'internaute. ===== Versions ===== * Version 1.2 SSE: * Utilisation d'une session pour stocker des données. * Modification des noms pour éviter les conflits de namespaces (fonctions, CSS...). Tout est maintenant préfixé par "httpbl_". * La bannière ne s'affiche dans les pages que si le dernier spam date de moins de 8 jours. (La page de blocage reste affichée dans tous les cas.) * Couleurs plus supportables. * Version 1.3 SSE: * On ne démarre la session que si session_id() n'existe pas (Cela règle des conflits avec certaines applications php). * Version 1.4 SSE: * La bannière en haut de chaque page n'est affichée que si l'internaute est sous Windows. (Par contre la page de blocage reste affichée dans tous les cas.) ~~DISCUSSION:closed~~