Apenas unas horas despues de actualizar a WordPress 2.5 el plugin Akismet ya tenia atrapados varios cientos de mensajes de spam en los comentarios y, especialmente, en los trackback. Que recuerdos!, la versión anterior de WordPress que acabamos de dejar, la tenía hecha unos zorros a base de parches, hacks y personalizaciones varias, pero con todo eso había conseguido quitarme de encima el muerto de entrar al panel de control y encontrarme con el “Akismet ha identificado 300 mensajes como spam“.

Menos mal que de vez en cuando me dá por apuntar por aquí algunas de las cosas que hago. Repetimos.

Para evitar el spam en los comentarios

Edita el archivo “comments.php” del tema que tengas activo en WordPress. Bajo el campo TEXTAREA añadimos un nuevo input con el siguiente texto:
<input name="pulsaciones" type="hidden" value="0" />
Y modificamos el campo TEXTAREA añadiendo la opción en negrita:
<textarea id="comment" onkeydown="pulsaciones.value=eval(pulsaciones.value)+1;" cols="100" rows="10" name="comment"></textarea>

Con esto creamos un input que acumula el número de pulsaciones en el campo TEXTAREA de los comentarios. Ahora, desde el archivo de WordPress wp-comments.php situado en el directorio raiz de tu sitio filtramos aquellos comentarios en el que las pulsaciones sean menor de 3 ¿? ( esto, evidentemente, impediría que un usuario enviase un comentario con un número de caracteres menor de 3, como “SI” ó “NO”. Modificadlo a vuestro antojo). Para terminar edita wp-comments.php y añade:
$comment_author = trim(strip_tags($_POST['author']));
$comment_author_email = trim($_POST['email']);
$comment_author_url = trim($_POST['url']);
$comment_content = trim($_POST['comment']);
//inicio nuevo codigo
$comment_pulsa = trim($_POST['pulsaciones']);
if( '' == $comment_pulsa || $comment_pulsa < 3 ) die();
//fin nuevo codigo

Con esto han desaparecido los comentarios de spam. Al parecer dá algun tipo de problemas con dispositivos tipo PALM en los que por lo visto no se detectan pulsaciones de teclado. En cuanto se me ocurra algún otro sistema lo cambio, mientras….

Reducir el spam de trackback

Para solucionar/reducir el volumen de spam en los trackback he tenido que recurrir a filtrar directamente las entradas por palabras, es decir, aquellos trackback que reciba Cuaderno de Campo, en cuyo título aparezca la palabra “casino” son directamente ignorados. No hay aviso previo, ni moderación.
Esto es potencialmente “peligroso”, puesto que una mala elección de las palabras que se quieren filtrar puede filtrar trackback auténticos. Asi, escoge palabras largas, en ingles y que no formen parte de palabras más largas.

Edita el archivo que se encuentra en el directorio raiz de WordPress, wp-trackback.php y aproximadamente a la altura de la linea 38 añades:

$title = stripslashes($_POST['title']);
//inicio de nueva linea de codigo
if( eregi('casino|poker|roulette|nsurance|kasino|blackjack', $title)!=false ) die;
//fin de nueva linea de codigo
$excerpt = stripslashes($_POST['excerpt']);
$blog_name = stripslashes($_POST['blog_name']);

Con la línea anterior he pasado de 300-400 spam-trackback diarios a 20-30. Siguen siendo muchos, pero ya es una cifra manejable y que irá bajando conforme vaya “afilando” la expresión regular del fitro.