Bloquear spam con PHP de la mano de Akismet
La pesadilla de todo Webmaster es el SPAM, si no tenemos alguna forma de bloquearlo puede convertirse en algo incontrolable. Akismet es un gran aliado de muchos usuarios de WordPress como este blog, pero puede serlo también de cualquier otra web desarrollada en PHP ya que dispone de clase que nos permitirá verificar todos los mensajes que se envían desde nuestra web.
El primer paso que debemos realizar es descargar desde la web de Akismet la clase para PHP5 para posteriormente subirlo a la carpeta donde tengamos el fichero donde recibimos los datos del formulario, tambien necesitaremos para poder usar Akismet la WordPress API key. Una vez que tengamos esto lo que tendremos que hacer es llamar al fichero class.akismet.php justo antes de guardar los datos en nuestra base de datos y confirmar que no es Spam de la siguiente forma:
function comprobarspam($comentario_nombre,$comentario_email,$comentario_url,$comentario_texto) { $WordPressAPIKey = 'clave'; // Clave que nos devuelve Wordpress $web = 'http://www.ejemplo.com/'; // Nuestro dominio require("class.akismet.php"); // creamos una instancia de la clase $akismet = new Akismet($web ,$WordPressAPIKey); $akismet->setCommentAuthor($comentario_nombre); $akismet->setCommentAuthorEmail($comentario_email); $akismet->setCommentAuthorURL($comentario_url); $akismet->setCommentContent($comentario_texto); $akismet->setPermalink('http://www.ejemplo.com/urldelarticulocomentado/'); if($akismet->isCommentSpam()) { //Comprobamos si el comentario es spam o no return true; } else { return false; } } $comentario_nombre = $_POST['nombre']; // Nombre del comentario $comentario_email = $_POST['email']; // Email del comentario $comentario_url = $_POST['url']; // URL del comentario $comentario_texto = $_POST['texto']; // Texto del comentario $spam = comprobarspam($comentario_nombre,$comentario_email,$comentario_url,$comentario_texto); |
Lo más apropiado ahora que sabemos que si es spam es eliminarlo, la efectividad en las veces que lo he probado es realmente alta. Lo que si nos podemos encontrar es con mensajes que no detecta, para reportarlos a Akismet podemos hacer uso de $akismet->submitSpam(); o en caso contrario $akismet->submitHam();.
Cual duda error o sugerencia que tengáis podéis dejar un comentario.