El spam es un problema que aqueja a toda Internet, y a los blogs, como parte de ella, también. En esta casa solíamos tener de 50 a 100 comentarios de spam al día, que no son pocos, pero me consta que en otros blogs más populares tienen muchísimos más.
Desconozco qué sistema tiene Blogger para tratar el spam —aparte de los famosos CAPTCHA que cada vez son menos efectivos contra los spammers—. Los usuarios de WordPress tenemos una herramienta muy buena llamada Akismet que captura prácticamente toda la basura entrante, pero como todo, tiene sus desventajas. Entre ellas, está el hecho de que algunos comentarios válidos se cuelan como spam (cada vez menos), y esto implica que los sufridos blogueros tenemos que pasarnos un buen rato ojeando la basura capturada por si acaso. Además, debemos borrar el spam de vez en cuando para que no se amontone, pues supone una carga extra para la base de datos.
En Enchufa2 llevamos bastantes días sin que Akismet registre ni un solo mensaje de spam, y todo gracias a una solución muy sencillita de implementar y a la vez muy efectiva, que encontré en la magnífica página Emezeta blog. Paso a explicar su funcionamiento e implementación.
Los bots que utilizan los spammers son programas bastante tontos. Se dedican a buscar formularios, a rellenarlos enteros y enviarlos. Nótese lo de «rellenarlos enteros», porque ahí radica el quid de la cuestión. ¿Qué ocurriría si pudiéramos poner un campo que el usuario normal no viera? Pues que en los comentarios válidos este campo se quedaría sin tocar, mientras que los comentarios de spam llegarían con ese campo modificado —puesto que no funcionan «de forma visual», sino que son programas que reciben el código de la página, buscan los campos existentes y los rellenan—. ¡Anda! ¡Pero resulta que hacer lo que acabamos de describir es muy sencillo mediante CSS!
Así es. Sólo necesitamos agregar una línea a nuestros formularios:
[code lang=»xml»]<input type="text" id="name" name="name" size="25" value="1" style="display:none" />[/code]
Es un campo de texto normal y corriente, de nombre «name» (para dar el pego), de tamaño 25 (o lo que queráis, da exactamente igual), con un valor predefinido (en este caso «1») y oculto gracias a CSS (atributo style). De esta manera, tenéis definidos de manera unívoca tanto comentarios de spam como válidos. Ahora, sólo resta darles un tratamiento diferente a cada uno de ellos.

La última parte requiere mínimos conocimientos de PHP, pero cuando digo mínimos, son ínfimos. Hay que editar el archivo PHP que se encarga de procesar los comentarios del blog (wp-comments-post.php en WordPress) y añadirle una sencilla condición if. No os asustéis, es tan sencillo como lo que sigue: si el valor del campo predefinido sigue inalterado, procesamos el comentario mediante todo el código del archivo original; si el valor de este campo ha sido alterado, no hacemos nada. En mi caso:
[code lang=»php»]if ($_POST[‘name’] == 1) {
/*Aquí el código de wp-comments-post.php
…
…
… */
}
else {
/* No hacer nada */
}[/code]
Así de simple. El else ni siquiera hay que ponerlo. De esta manera, habremos reducido el spam entrante prácticamente a cero (salvo algún trackback con spam, que también los hay).
Típicamente, el sistema que acabo de explicar será suficiente para la mayoría de los blogs. Para los entendidos que quieran un sistema antispam más efectivo (reducir carga del servidor, etc.), tenéis un tutorial más avanzado en la misma web, en el artículo Spam bots en blogs y cómo detenerlos.