Les spams sont nos pires ennemis et il est parfois pas très facile de programmer une anti-spam pour sont blog où ses applications... C'est pour celà que dans un court article je vous présenterais une des Class de la Framework Zend pour s'en protéger. |
La Zend Framework est une des plus puissantes framework de php tout comme Symfony, CakePHP... qui se distingue bien de part son utilité mais aussi de la grande simplicité qu'elle donne aux développeurs qui n'ont souvent pas le temps.
Beaucoup de class sur l'anti-spam existent comme la principale : Akismet (Vous pouvez, si vous le vouler, utiliser ce lien pour installer un anti-spam).
Mais cette démonstration vous permettra de vous faire une idée de la simplicité de la Framework Zend. Cependant il y'a un avantage et un désavantage à avoir pour une Framework que nous exprimerons à la fin de cette article.
Je vous laisse maintenant installer ce petit bijoux...
Comme les principales frameworks, Zend est simple d'installation. Il suffit de décompresser celle-ci dans votre espace web (ex: "www"). Elle est en ce moment disponible à cette adresse : http://framework.zend.com/download (prennez la release !)
Une fois placé dans votre répertoire, vous pourrez utiliser l'anti-spam que nous allons concocter...
Pour la mise en place du service Anti-Spam, Zend à intégré l'API Akismet (Service de WordPress) permettant de détecter si un contenu est un spam ou pas.
Attention : Akismet requiert une API Key
Avant toutes utilisations, il est important d'avoir une API Key valide, rendez-vous à cet adresse : http://wordpress.com/api-keys/ (elle vous sera envoyée par email à votre inscirption).
Nous allons donc initialiser notre Class Zend_Service_Akismet(); et procéder à une vérificaton de l'API Key :
<?php $apiKey = '6f4fd981z1'; // Votrz API key // Incluons le service require_once 'Zend/Service/Akismet.php'; // Initialisation de la Class Zend Service Akismet $akismet = new Zend_Service_Akismet($apiKey, 'http://framework.zend.com/wiki/'); if ($akismet->verifyKey($apiKey)) { /* Si la cle est valide nous affichons un message joyeux */ echo "Votre clé est valide.\n" ; } else { /* Sinon nous tuons le processus */ die ( "Clé non valide\n" ) ; } ?>
La méthode verifyKey renvoie 0 ou 1 en fonction de la validité de l'API key saisie.
Pour celà il faudra stocker le contenu dans un tableau comme celui-ci :
$data = array( 'user_ip' => '111.222.111.222', 'user_agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.2; en-GB; rv:1.8.1) Gecko/20061010 Firefox/2.0', 'comment_type' => 'contact', 'comment_author' => 'John Bubu', 'comment_author_email' => 'regie@myhaus.net', 'comment_content' => "<a href=\"http://www.vivelapub.com\">Huhu</a><a href=\"http://www.vivelapub3.com\">Ahah</a><a href=\"http://www.vivelapub4.com\">Huho</a>" );
Et utiliser la méthode isSpam pour détecter si évidement le contenu est bien un spam. Dans "comment_content" j'ai exagéré un peu pour que mon message soit détecté sans soucis. Nous verrons par la suite que si un message est mal intérpreté par Akismet, nous devrons contribuer pour signaler ceci à la base...
Source complète du détecteur :
<?php $apiKey = '6f4fd981z1'; // Votrz API key // Incluons le service require_once 'Zend/Service/Akismet.php'; // Initialisation de la Class Zend Service Akismet $akismet = new Zend_Service_Akismet($apiKey, 'http://framework.zend.com/wiki/'); if ($akismet->verifyKey($apiKey)) { /* Si la cle est valide nous affichons un message joyeux */ echo "Votre clé est valide.\n" ; } else { /* Sinon nous tuons le processus */ die ( "Clé non valide\n" ) ; } $data = array( 'user_ip' => '111.222.111.222', 'user_agent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.2; en-GB; rv:1.8.1) Gecko/20061010 Firefox/2.0', 'comment_type' => 'contact', 'comment_author' => 'John Bubu', 'comment_author_email' => 'regie@myhaus.net', 'comment_content' => "<a href=\"http://www.vivelapub.com\">Huhu</a><a href=\"http://www.vivelapub3.com\">Ahah</a><a href=\"http://www.vivelapub4.com\">Huho</a>" ); if ($akismet->isSpam($data)) { echo "Sorry, nous pensons que vous êtes un spammeur."; } else { echo "Vous êtes Clean !"; } ?>
Souvenez-vous si dessus, le jolie tableau $data que nous avons généré. Si pour vous le contenu parvenais à être du spam, il sera utile à l'avenir d'envoyer ce contenu en tant que spam pour ne plus recevoir ce type de message grâce à la fonction Zend_Service_Akismet::submitSpam().
<?php // .... données mises en tableau $data $akismet->submitSpam($data)); // Signal de spam ?>
Les applications ne sont pas sans erreurs et c'est pour celà que Akismet met à son service le "ham" pour servir de son mieux.
Pour corriger cette Alerte Zend donne à disposition : Zend_Service_Akismet::submitHam()
<?php // ... tableau $data $akismet->submitHam($data)); // Nous signalons que ce n'est pas un spam ?>
Comme vous pouvez le constater, ce service Zend est facile d'implémentation. Vous avez néaumoins d'autres fonctionnalités proposées par Zend...
getBlogUrl() et setBlogUrl() Permettent de retrouver et modifier l'adresse du Blog en question.
getApiKey() et setApiKey() Retrouver et modifier l'API Key pendant une requête.
getCharset() et setCharset() Retrouver et modifier l'encodage pour créer une requête.
getPort() et setPort() Retrouver et modifier le port TCP lors d'une requête.
getUserAgent() et setUserAgent() Retrouver et modifier les informations à propos du navigateur web.
Cette création est mise à disposition sous un contrat Creative Commons