sinprogramar.blogspot.com

30/1/09

Bloquear el spam en los comentarios de wordpress

Desde hace un par de meses tengo un videoblog creado con wordpress. Y desde hace un mes tengo un grave problema de spam.

La verdad es que el blog apenas tiene 2 o 3 visitas diarias, pero he tenido la mala suerte que algún bot de spam me ha fichado. He llegado a recibir 1200 spam en un solo dia. Básicamente son comentarios en Ingles que enlazan con Webs donde se anuncian casinos y demás basura limpia bolsillos.

Al principio no tenía ninguna protección contra el spam y recibía todos los comentarios para moderar en mi correo. El primer día cuando vi más de 50 mensajes nuevos en la bandeja de entrada creí que de pronto mi blog había tenido un éxito terrible. Que gracia...

El segundo día fueron casi 200 mensajes, y viendo que el problema no iba a solucionarse solo, decidí activar el plugin anti-spam que incorpora wordpress: Akismet.
Desde ese día ningún mensaje de spam se me ha colado, pero hay algo que me preocupa: los recursos del servidor que mal gasta el envio del spam.

Buscando por la red encontré soluciones como un plugin de CAPTCHA o javascript. El plugin CAPTCHA no me convencía, así que opté por utilizar javascript.
Creé una función que oculta el botón de enviar mediante la librería jQuery y no lo muestra hasta que no se introduce la respuesta a una pregunta. Pero al parecer los bots de spam no interpretan ni el javascript ni el CSS. Así que no me sirvió de nada.

Otra idea que se me ocurrió es que probablemente los bots localizan los campos del formulario por su ID, ya que en todos los blogs de wordpress es el mismo... a no ser que... ¡¡los cambies!!.

Sabía que esto podía cortar por lo sano el spam, pero no tenía ni idea de como ni donde se manejan las variables que almacenan el contenido de los comentarios. Pero finalmente el señor google me dio su santa respuesta.

Los cambios son sencillos, se trata de cambiar el nombre que identifica el input de uno de los campos obligatorios y después poner el mismo nombre en la variable que lo recibe.

Vamos a ver como hacerlo:
  1. Abrimos el archivo comments.php del tema que estas utilizando. Ej. tusitio.com/wp-content/themes/default/comments.php. Este es el archivo que genera el formulario.
  2. Localizamos el siguiente texto:
    <input name="email" type="text" value="<?php echo $comment_author_email; ?>"/>
    (esta en por el final).
  3. Sustituye "email" por otro nombre, por ej. "correo".
  4. Guardamos y ahora abrimos el archivo wp-comments-post.php. que se encuentra en la raiz. Ej. tusitio.com/wp-comments-post.php
  5. Localizamos:
    $comment_author_email = trim($_POST['email']);
    (hacia la mitad del documento).
  6. Sustituye 'email' por el nombre que has puesto, en mi caso 'correo'.
  7. Guardamos, lo subimos y listo.
Para más seguridad también se puede hacer con los otros inputs.

Desde que hice este cambio Akismet ya no ha vuelto a detectar spam. Espero que duré.

Comenten cualquier duda o crítica.

Revisión del 31/02/2009:
Un día después el truco del almendruco ya a perdido su efectividad. Malditos... seguiré investigando.

Revisión del 31/02/2009:
Estoy probando un nuevo sistema. En el próximo post daré mas detalles sobre el resultado.

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.


Creative Commons License