Uno de los mayores problemas al mantener un blog, es la gran cantidad de spam que se recibe. Existen varios métodos para combatirlos, desde banear ips, urls ó filtrar palabras hasta implementar captchas o solicitar registros.
En BaluArt, como blog de desarrollo propio, implementé varios de estos métodos, empezando con el registro. Hasta hace unos días utilizaba la mezcla de varios métodos (javascript con variable oculta, filtro de palabras y banneo de ips) con muy buen resultado al principio, pero desde hace unas semanas ya no era el mismo. Y como muchos blogs comentaron sobre las bondades de Akismet (conocido plugin antispam de WordPress) decidí implementarlo. El resultado ha sido muy bueno.
¿Cómo funciona Akismet?
Debo empezar diciendo que no es sólo un plugin para WordPress (también los hay para MovableType y otros cms). Akismet es básicamente un servicio web que analiza los comentarios:
- Un script envía los comentarios a un servidor central,
- Akismet analiza los comentarios
- Akismet devuelve la información: si es spam o no.
Al ver sus estadísticas, uno se percata que Akismet es muy utilizado. En estos momentos ya ha capturado 188,509,207 spams, y cerca de 60,000 sólo hoy día. Según he leído, su potencia para analizar los comentarios es muy buena, han implementado un algoritmo que incluso evitaría el manipuleo de su base de datos contra los spammers que envíen spam como comentarios buenos y viceversa, envenenando la base de datos. En el blog llevamos usándolo 2 días y ha cazado todos (350 más o menos).
Veamos entonces como implementarlo en un sitio web cualquiera (blog, portal, foro u otro) con PHP.
Implementando un sistema anti-spam con Akismet y PHP
Akismet es un web service muy potente, pero también muy fácil de utilizar. Sin embargo, como medida de seguridad (imagínense cuantos spammers estarán tras el saboteo de este sistema), lo primero es tener una API Key -clave para poder utilizar su API-, para esto, simplemente, debemos registrarnos en wordpress.com y la obtendremos.
El segundo paso es descargar la clase Akismet.para PHP 4, también las hay para PHP 5, Java, Ruby y otros en la sección de desarrollo de Akismet. Les dije que todo era muy fácil. Una vez desempaquetado el archivo, subimos el fichero Akismet.class.php a nuestro servidor.
Finalmente, en el archivo que procesa el formulario, y antes del código que inserta el comentario a la Base de Datos, añadimos este script:
<?php
include ('Akismet.class.php'); // path a la clase
// Creamos una instancia del objeto y le pasamos nuestra URL y la API Key
$akismet = new Akismet('http://www.baluart.net', 'TU API KEY AQUÍ');
// Recuperamos las variables enviadas con el formulario y las enviamos como atributos de de la clase akismet
$akismet->setCommentAuthor($_POST["autor"]);
$akismet->setCommentAuthorEmail($_POST["email"]);
$akismet->setCommentAuthorURL($_POST["url"]);
$akismet->setCommentContent($_POST["comentario"]);
// Si el comentario enviado es spam, lo insertamos a la BD pero no se muestra
if($akismet->isCommentSpam() == true) {
$_POST['validez'] = "0";
// Si no lo es, se muestra el comentario
} else {
$_POST['validez'] = "1";
}
?>
Cabe mencionar que con este código, insertamos el spam a la BD (no se muestra públicamente) para comprobar que no se esté filtrando comentarios verdaderos. Ya luego podremos eliminarlos fácilmente desde el panel de administración. Sin embargo, depende de cada quien procesarlo como mejor le parezca (modificando el condicional).
Eso es todo, ya tenemos un eficiente sistema anti-spam en nuestra web.
Funcionara para web servers?
Muy bien
muy bueno, para Joomla también sirve??
Hay una versión para Joomla??
Genail, me vino muy bien!
como se hace una variable en el mismo codigo para agregar una lista de palabras no permitidas