Soyez Zend avec les Spams

Par FlUxIuS 2008-05-10 { Catégorie : PHP }

 

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.

 

Introduction

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

 

Installation

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

 

Mise en place de l'anti-Spam

Zend_Service_Akismet

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

 

Vérification de l'API Key

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.

 

Détecter si le contenu est un spam

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 !";
}
 
?>

 

Signaler un Spam à Akismet :

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

Fausse alerte !

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

 

Méthodes spécifiques

      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.

Powered by SlashOn blog - © Sebastien D. (FlUxIuS)

Debian powered Server Creative Commons License W3c Validation
Cette création est mise à disposition sous un contrat Creative Commons