Solución sencilla y efectiva para evitar el spam en los blogs

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.

7 comentarios sobre “Solución sencilla y efectiva para evitar el spam en los blogs

  1. jejeje Este método lo estuve comentando con WisPhysics (no sé si era cuando ya os habíais ido o no…): el problema es que yo no había podido implantarlo porque no tengo ni guarra de programación (y cuando digo «ni guarra» significa «menos que ínfimo»). Sin embargo, ahora que tú ya has picado el código, me parece que no voy a tener que moderar ni un solo comentario más :D

  2. Si tienes alguna duda me dices, aunque ya ves que es muy fácil. Para testearlo, puedes usar el Firebug con Firefox, de esa manera puedes convertir el campo oculto en visible y modificarlo para ver qué le pasará a un comentario de spam.

    Espero que esto no lo meneen, para que los spammers no se enteren… ;-) No, en serio, en cualquier caso aunque los spammers implementaran algo para evitar este método, siempre se le podría buscar la vuelta de muchas maneras para que siguiese funcionando. La inteligencia artificial, de momento, no da para tanto (como no da para tocar un clarinete… ;-) ).

  3. Hola, me parece una idea muy ingeniosa :D
    ¿Es compatible también con usuarios de navegadores que no soporten CSS? Como algunos móviles, PDAs y tal…

  4. Funciona en tanto en cuanto el usuario no modifique ese campo. Para curarnos en salud, podemos añadir un texto ocultándolo con CSS que diga «no modificar este campo», para que lo vean los usuarios con navegadores que no soportan CSS. Y ni siquiera eso: podemos poner como valor predeterminado del campo eso mismo, «no modificar este campo», en vez de el «1» que hay en el ejemplo.

Comentarios cerrados.