Evitez les spams dans vos formulaires web grâce à Akismet et le Zend Framework

Historiquement, Akismet était un service fourni par Automattic, exclusivement pour WordPress. Étant donné la puissance de la base construite par la quantité de blogs filtrés par ce service, ils ont développé une API permettant à n’importe quelle application web de profiter d’un filtre anti-spam performant. Il est tout de même important de souligner que le service est disponible gratuitement pour des sites personnels. Il existe néanmoins une licence payante…

Pour utiliser cette API, il faudra d’abord créer votre clé Akismet. Vous le verrez, il faudra en réalité créer un compte WordPress pour obtenir votre clé.
Une fois votre clé créée, téléchargez le Zend Framework. Le package « minimal » suffit. Une fois le framework extrait et uploadé sur votre site, on peut commencer à coder.

Le code…

Pour faire simple, on va dire que vous n’avez qu’un type de formulaire sur votre site. Si vous en avez plusieurs, il va de soit que vous devrez développer une interface ou éventuellement un decorator pour qu’un objet puisse « parser » votre formulaire quelque soit les champs qui le compose.

Placez vous donc sur la page où le traitement d’un formulaire se fait.
Avec cette API, on peut décider soit de filtrer juste avant un insert/update en base de données, avec donc des chances de faux positifs…
Ou bien, on peut décider de participer à l’évolution de la base de données d’Akismet en soumettant votre décision (est-ce un spam? oui/non; est-ce un faux-positif? oui/non). On dit que c’est une API collaborative, dans le sens où plus les gens soumettent leur décision, plus l’API est performante.

Pour des raisons de temps, nous allons voir la première façon de faire, (tan-pis pour les faux positifs :P)

include 'Zend/Service/Akismet.php';
$apiKey = '123456789'; // Votre Clé API Akismet
$url = 'http://yrweb.fr/test.php'; // Adresse URL du traitement

// Début du traitement du formulaire, tests des valeur, validators etc.
{
	$akismet = new Zend_Service_Akismet($apiKey,$url);
	if ($akismet->verifyKey($apiKey)) {
		// La clé est valide, continuons
		$data = array(
		'user_ip'              => $_SERVER['REMOTE_ADDR'],
		'user_agent'           => $_SERVER['HTTP_USER_AGENT'],
		'comment_type'         => 'contact',
		'comment_author'       => $_POST['username'],
		'comment_author_email' => $_POST['email'],
		'comment_content'      => $_POST['comment']
		);

		if ($akismet->isSpam($data)) {
			echo "Désolé, nous ne voulons pas de votre commentaire";
		} else {
			// Suite du traitement
			echo "OK" ;
		}
	} else {
		echo "La clé Akismet est invalide.";
	}
}

Participer à l’évolution d’Akismet

Il est évident que participer en soumettant vos décisions est très important. La classe Zend_Service_Akismet vous permet donc grâce à ces méthodes submitSpam() et submitHam() de le faire. A vous de jouer, créez votre backend !

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Anti-Spam Quiz: