Spam en el foro SMF. Anti-Spam

logo SMF Desde hace ya mogollón de años, tengo un foro de java con SMF (Simple Machines Forum). Y desde hace ya mogollón de años vengo sufriendo el spam. Montones de «bots» registrados al día y algunos consiguen llegar a meter mensajes de spam en el foro.

Fui poniendo lo que permite SMF como anti-spam. Un captcha y preguntas que el usuario que quiere registrarse debe contestar. Las preguntas deben ser sencillas para que un usuario normal no tenga problemas, pero que un bot no pueda constestar fácilmente. Mis preguntas eran estilo de qué color es el caballo blanco de Santiago o cuanto es 2+3.

Pues nada, sigue habiendo problemas, así que me he puesto a buscar alternativas. Y encontré esta lectura que me ha llamado la atención «Qué puedo hacer contra el spam»

Resulta que los bots en general pueden con los captchas y según dice ese artículo, un captcha da más problemas a un usuario legítimo al registrarse que a un bot. Desde luego, el captcha más complejo de SMF a mi me cuesta o no puedo leerlo y no ha conseguido parar a los bots.

Resulta también que los bots saben hacer cuentas en las preguntas estilo cuánto es 2+3 y resulta que también prueban a poner todas las palabras de la pregunta como respuesta, con lo que lo de qué color es el caballo blanco de Santiago tampoco es una buena opción.

En este hilo leo posibles buenas preguntas para hacer. Algo que nadie necesita saber puesto que la respuesta se busca en la pregunta y que teóricamente dificulta el asunto a los bots. Preguntas estilo «Pon los tres últimos números que hay en la cadena dg7564gh»

Así que he cambiado las preguntas a preguntas de este estilo. A ver qué pasa.

sitemap para SMF

Hace tiempo comenté en un post que el foro SMF es un desastre para que lo indexe google y, de hecho, no aparecía en google ninguno de los temas de mi foro de java. Intenté instalar el plugin seo4smf para tratar de arreglarlo, pero no conseguí que me funcionara. Al final, como comenté en aquel post, me hice un pequeño programa java que generara un fichero sitemap.xml para colgarlo en el foro.

Esa opción no era buena del todo. Conseguí que google indexara los temas del foro, pero tenía que actualizar el sitemap periódicamente a mano. Así que decidí hacerme un pequeño script sitemap.php que hiciera de sitemap para google de forma automática.

Este script, al llamarlo, consulta en la base de datos el campo id_topic de la tabla smf_topics. Es la única información que necesita para generar el fichero XML de sitemap. El script dice que devuelve un "Content-Type : application/xml" para que cuando google lo consulte piense que es un fichero XML, luego envía los tags XML correspondientes al sitemap.

Adjunto el código php por si a alguien le interesa

<?php
header(‘Content-Type: application/xml’);
include (‘Settings.php’);

print (‘<?xml version="1.0" encoding="UTF-8"?>’);
print (‘<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">’);

$link = mysql_connect ($db_server, $db_user, $db_passwd) or die ("<center>No se puede conectar con la base de datos\n</center>\n");
$query=’select id_topic from smf_topics’;
$result=mysql_db_query ($db_name, $query, $link);

while ($row = mysql_fetch_array ($result))
{
   print (‘<url>’);
   print (‘<loc>’);
   print (‘http://foro.chuidiang.com/index.php?topic=’.$row[0]);
   print (‘</loc>’);
   print (‘</url>’);
}
mysql_free_result($result);
print (‘</urlset>’);
?>

El include "Settings.php" únicamente incluye un fichero de configuración del foro, en el que están las variables con el nombre de la base de datos $db_name, el usuario $db_user y la password $db_passwd. Ojo, no le busqueis pegas, que las tiene. Yo no tengo ni idea de PHP.

 

Indexado en google del foro SMF

Después de darme cuenta del pequeño desastre del foro SMF con google, y de no conseguir que funcionara el plugin de seo4smf, decidí hacerme mi propio sitemap.xml para google. Había hecho un programita en java que generaba ese fichero xml simplemente con un bucle de 2 a 1059 (el número de post en el foro en ese momento). Subí el fichero al foro, lo dí de alta en google…. y aparentemente NO funcionó. Después de un par de semanas, ninguno de los post del foro estaba indexado.

Estuve pensando cual podía ser el motivo. Hay páginas del foro que sí están indexadas en google, como la de mensajes recientes, los perfiles de los usuarios, la página principal del foro… pero NO los post. A pesar de que los parámetros que se pasan a la página php del foro son igual de feos en todos los casos, no veía por qué los post no se indexaban. Al final y por probar, decidí que podía ser cosa del punto decimal. Los post llevan un parámetro tal que así "topic=1046.0", con un decimal punto cero. Se me ocurrió que google podía interpretar ese decimal como que esa variable y, por tanto, la página, es muy variable en función de ese valor que no parece un índice, sino un valor arbitrario.

Así que hice mis experimentos. Primero comprobé que se puede acceder al post sin poner ese decimal, con algo como "topic=1046". Funciona bien. Así que hice el sitemap.xml sin ese decimal…. y funcionó. Una semana después de subir el nuevo sitemap.xml, google empezó a indexar los post y un par de semanas después, ya estaban casi todos.

Ahora la tarea que me queda es hacer un pequeño script de php que me genere ese sitema.xmp, o bien un sitemap.php que devuelva una página xml con el formato del sitemap. De esta forma, cuando google visite el sitemap, lo tendrá actualizado.

Me quedan algunas dudas. Aparentemente tengo una cosa que no le gusta a a google, que es contenido duplicado. Se accede al mismo post a través de "topic=1046.0" que a través de "topic=1046". Sin embargo, al no estar indexado el primero, quizás no importe, ya que no tiene con quien comparar el segundo. Es cuestión ahora de ver si en las búsquedas de google empiezan a aparecer los post por algún sitio y de revisar mis estadísticas, a ver si se empieza a entrar directamente en los post desde google.