Adios definitivo al spam en el blog

Últimamente el spam en el blog se estaba convirtiendo en algo alarmante. Se estaba incrementando de una forma continua y llegaba ya a tener 1000 al día (algo así como 2500% de las visitas). Akismet hacía su labor decentemente, pero siempre hay alguno que se colaba, y si eso lo vamos multiplicando por los días al final llega a convertirse en una pesadilla. Alguna solución había que poner.

La mayoría del spam, 90%, venía por trackbacks. Dado que no son, IMHO, algo muy útil, he decidido desactivarlos. Con esto iba a solucionar la mayor parte del problema (90% :D), pero si nos ponemos, ¡nos ponemos!. Queda eliminar todos los malditos bot comentaristas.

El principal problema en la lucha contra el spam, es que es una continua batalla entre los spammers y el resto del mundo. Si se comienza a utilizar la táctica ‘x’, los spammers pensarán en sobrepasar esa barrera en concreto, en definitiva, es mucho más fácil atacar (spammer) que ser atacado. Típico ejemplo sería de cómo empezaron los correos vendiéndote viagra con imágenes, hasta entonces los típicos filtros eran bayesianos analizando las palabras (e.g. si contiene la palabra “viagra”, ¡chungo!). Una imagen no la puedes procesar como texto (al menos en tiempo computacional factible como para gestionar miles de correos por segundo) por lo que se puede solucionar aplicando funciones hash a las imágenes, para identificarlas. Entonces una forma de saltar esto es usando imágenes ligeramente modificadas (un simple pixel es suficiente) que produciría diferente resultado al aplicar la función hash. Vamos, típico juego del gato y el ratón…

Por otro lado, si tratas una simple batalla contra el spam (por ejemplo este blog) es mucho más sencillo ganarla (que la guerra) pues puedes aplicar soluciones particulares al problema, por lo que garantizas tu victoria, ves que bien. Mi simple, pero efectiva, solución es forzar que los comentarios sean enviados desde un navegador con javascript activado, insertando un campo oculto en el formulario que será rellenado con un valor fijo mediante javascript al finalizar la carga de la página. Este valor se comprobará en el lado del servidor que existe, sino es el caso, rechazar comentario.

Algo así como añadir esto a la parte de los comentarios de tu theme (jQuery lo tengo debido a otros plugin de wordpress):

<input type="hidden" id="fuck" name="yeah" value="spam" />
(...)
<script>
jQuery(document).ready(function() {
      jQuery('#fuck').val('42');
}
</script>

Y esto en las primeras líneas de wp-comments-post.php de la carpeta raiz:

if($_POST['yeah'] !== '42')
    wp_die( __('U re a frakking spam bot') );

Desde que he puesto esta solución, mi contador de spam no se ha movido del 0. ¡Y que siga así! Por si alguno lo está pensando, el planteamiento todavía más simple de no usar javascript para rellenar el campo oculto (ponerlo fijo), lo probé y redujo la cifra de spam en cierta medida, pero no del todo. También se podría rellenar el campo usando javascript “simple” (sin jQuery) pero es algo bastante más sencillo de saltarse. Al usar jQuery (librería de terceros) fuerzas a que el bot que quiera spamearte a descargar javascripts de terceros, algo que puede resultar costoso para un bot (y que hasta ahora, parece que no hacen).

13 Thoughts on “Adios definitivo al spam en el blog

  1. Gran idea, aunque ten en cuenta que hay mucha gente rara sin javascript por la vida.

  2. Me parece una idea realmente buena, ademas esta medida solo afecta a la hora de hacer lo comentarios si no he entendido mal, asi que cualquier persona que no tenga javascript lo unico que le pasara es que no podra comentar; Una solucion realmente interesante.

  3. Pues funciona, jaja, en fin, te añadiré a la lista blanca de NoScript, pero me parece demasiado radical tu medida, no te bastaba con poner un captcha o algo así ?, :-p.

  4. seguro q no tengo de eso, probando….

    edi: ah pues si que puedo comentar jaja

  5. @Dorian Actualmente quien no tenga javascript activado, prácticamente no puede usar ninguna web. Si un usuario se molesta en usar noscript o similares para desactivarlo, presupongo que conocerá los riesgos (e.g. no funciona ‘x’ de la web ‘y’). Además como dice mercu, solo afecta a los comentarios.

    @Rubén, La opción de usar un captcha es algo totalmente descartado, es peor el remedio que la enfermedad. A mi me jode mogollón tener que completar un captcha solo para comentar.

  6. @Blaxter: lo sé, por eso no uso el NoScript, pero soy un puritano y lo programo todo con etiquetas <noscript>. Por eso no veo muy allá el que no haya alternativa.

  7. @Dorian, toda la razón del mundo, pero prefiero marginar a los ‘n’ que tengan javascript desactivado y quieran poner un comentario. A que todo el mundo tenga que ir completando un captcha. Como ese ‘n’ va a tender a cero, es una solución aceptable.

    Este método para una web con mayor tráfico o con un mínimo de relevancia, sería inaceptable.

  8. Esto de el javascript y los campos ocultos ya tiene bastante tiempo si mal no recuerdo, pero el recurso de jquery es interesante 😛

    Por cierto, ¿de verdad tenías 1000 comentarios de spam?¿todos de diferentes fuentes? De ser así, he subestimado a los spammers.

  9. La gran mayoría eran trackbacks (90-95%), no comentarios (al día 50-100 comentarios-spam “solo”), y todos de diversas fuentes, al menos mirándolo a ojo. Lo que me preocupaba era su tendencia, que si hace par de meses tendría 100-300, ahora ya llegaba a los tres ceros :-/ (se deberían de sentir a gusto los cabrones).

    Y la gracia del método como dices, no es el campo oculto, sino el uso de terceros para completarlo :). Sigue siendo trivial, pero más efectivo.

  10. Ale, pos ya no te enlazo 😛

    Lo de los spammers contigo ya es saña, qué putada. Creo que ya te lo dije, pero yo cierro los comentarios en posts con más de 21 días de antiguedad, te ahorra muchos follones 🙂

  11. “Este método para una web con mayor tráfico o con un mínimo de relevancia, sería inaceptable.”

    estoy de acuerdo en lo que dices, pero en la practica muchas webs te limitan el uso de internet explorer este hecho me parece mas grabe que el limitarlo a los que no usen javascript.

  12. Me parece una medida muy buena, y eficaz sin duda. Puto spam, a mí últimamente tb me viene mogollón.

  13. Puto on 30 January, 2008 at 8:30 said:

    ^ No uses mi nombre en vano

Post Navigation