webmasters
40

Escrito por

¡OJO! Este artículo está indicado para programadores interesados en evitar spam en su blog.

Varios lectores de Emezeta y algunos amigos me han preguntado en muchas ocasiones como consigo evitar los terribles ataques de spam que afectan a casi todos los blogs.

¿Quién no ha recibido una horda de comentarios en perfecto inglés felicitandonos por nuestro sitio e invitando a ingresar a un casino online, alargar ciertas partes de nuestro cuerpo o tomar pastillitas azules cuál protagonista de Matrix o de otras películas menos conocidas?

Hace tiempo, hablé de SpamPoison, un sistema para «envenenar» listas de correo de spammers. Ahora voy a hablar de una técnica que he ideado (desconozco si ya existía, yo al menos la comencé a utilizar a base de pruebas) para evitar el spam en blogs, al más puro estilo de una trampa para ratones.

trampa ratones

Ventajas del sistema antispam: Hasta el día de hoy no he tenido ningún problema. El sistema atrapa todos los comentarios de spammers, dejando pasar sólo a los usuarios legítimos.

Desventajas: Puede generar confusión a usuarios que utilicen navegadores de tipo texto, pero además de poco frecuente es muy improbable, puesto que estos usuarios son bastante experimentados. Es posible, también, que si este sistema se comienza a implementar, los spammers busquen formas de «reventarlo».

antispam emezeta

Para implementar el sistema antispam utilizaremos PHP (o cualquier lenguaje del lado del servidor que dominemos) y CSS. ¡Si! ¡Has leído bien! ¡¡CSS!!.

¿Y cómo es posible? ¡CSS es un lenguaje para visualización y no para programación! Fácil, en realidad lo que hacemos con nuestro sistema es obligar a ir por un camino a los spammers y por otra a los usuarios legítimos.

Vamos a centrarnos en el formulario de envio de comentarios. Por norma general, tiene varios campos (input o textarea) para enviar la información. Cómo mínimo nombre y comentario, frecuentemente también el correo, página web y/u otros.

La gracia del asunto está en un campo input de texto ubicado al principio del formulario.

antispam emezeta

Dicho campo de texto (que le pondremos de nombre name) tiene un valor por defecto (por ejemplo, el texto: duquesadealba.). Además de esto, le aplicaremos un estilo CSS: display: none. Con esto ocultaremos el campo de forma que NO es visible para los usuarios, pero sí lo es para los robots o spammers.

¿Fácil, no? Pero aún no hemos terminado. El formulario, cómo todo form de su género que se precie, nos llevará a un script (PHP, ASP, etc...) que tratará el comentario para añadirlo a la base de datos, etc...

El truco del sistema antispam reside en que los spammers, por naturaleza, cambian todos los campos llamados comment, comentario, name o nombre por la publicidad que quieren hacer. ¡Perfecto! Ellos mismos han caído.

antispam emezeta

Un usuario legítimo no verá el campo oculto con CSS y por lo tanto enviará el comentario con la palabra que hemos elegido para identificar usuarios legítimos: «duquesadealba». En cambio, un spammer llegará al formulario y reemplazará el campo llamado name pensando que se trata del nombre y mostrando así el plumero.

Sólo resta añadir una comprobación en el script que recibe los comentarios, para que si el campo «name» no contiene la palabra escogida, no lo añada a la base de datos.

Se puede mejorar el sistema, añadiendo una lista de palabras clave personalizadas, en lugar de una sola palabra.

Y, como ya dije antes, los usuarios con navegadores de tipo texto (que no interpretan CSS) si que verán ese campo «oculto», pero podría bastar con poner un texto «no modificar» o algo similar.

RELACIONADOS Spam bots en blogs y como detenerlos RELACIONADOS Mod Security: Más seguridad en tu web RELACIONADOS Geolocalización en tu página web o blog
x Spam bots en blogs y como detenerlos
Manz

40 comentarios

JV
1

Uf esto es tan complicado para mi, pero yo tengo el spam poison y hasta la fecha cruzando los dedos va todo bien y espero que siga asi. Saludos y A plantar fuerte

Liamngls
2

Me estoy debatiendo entre un ser o no ser, por un lado me parece interesante y quiero menearlo y por otro lado: Es posible, también, que si este sistema se comienza a implementar, los spammers busquen formas de «reventarlo». Que dilema

Manz
3

En principio es dificil de "reventar" Liamngls... Al poner como nombre al campo de texto "name" (o "nombre" en los blogs ingleses) los spammers no pueden diferenciar si se trata o no de la casilla de nombre. Si por otra parte, intentan fijarse por los campos que tengan un texto, basta con añadir un texto "Escriba aquí..." o similar en los demás campos (que además, aumenta la accesibilidad web). Finalmente se podrían establecer varias palabras clave aleatorias con un random, para que un spammer no mire una palabra clave fija y le cueste más.

FrIkI
4

Buena idea. Se podria complementar con otro campo que deba permanecer vacio o con otro que se rellene de forma automatica con javascript. Los spammers no creo que ejecuten el javascript

FrIkI
5

Ah, se me olvidaba fardar, jajaja La mejor forma es tener un blog programado por uno mismo, eso despista _mucho_ a los spammers. Intentaron enviar comentarios las dos primeras semanas (sin éxito) ahora ya han parado.

David
6

Buen truco, ya había leido algo parecido hace tiempo. Llegará un día no muy lejano en que los robots desechen los campos con display: none , es tremendamente sencillo hacerlo. Y tambien llegará el día en el que los que hagan los comentarios no serán robots sino personas pagadas en cualquier pais con escasa renta per cápita, a centimo de euro por comentario, sino al tiempo. Otro truco antispam es obligar a previsualizar los comentarios antes de publicarlos, es el método que utilizo en los Blogs creados en Nireblog.com/es y de momento funciona.

Manuls
9

El único problema que le veo es para alguien con defectos visuales que use un lector de pantalla, ya que le leerá ese campo y no sabrá que poner, por lo demás es una gran idea que no había visto en otros sitios, enhorabuena

Clau
10

Dios Roman estas exo un crack, cada dia me sorprendes mas (lo del campo extra es buenisimo) . me a encantado la manera tan facil y a la vez tan interesante de crear un script tan sencillo como efectivo. ^_^ Te felicito!!!!

Elaine Marley
11

La verdad es que hay que ver cómo te lo curras... Y esto se te ha ocurrido todo después del examen? jijiji Por cierto, lo que ya sería un pelotazo es que hicieras un plugin de este sistema para wordpress. Entonces ya es cuando te alabamos y te ponemos flores y velas en el altar.

iOne
12

Vaya, no es por fardar ni nada por el estilo, pero hace justo 9 días que lo implementé en mi blog, aunque no en los comentarios, si no en una sección que tengo para que me cuenten a mi lo que quieran los visitantes. Metía un textarea a mayores, ocultándolo con CSS y en el script php que recibe los datos, verificaba si tenía texto. Si no tenía, comentario bueno; si tenía, redigiría al spammer a una web que me cae especialmente mal :P Un problema que tiene este método es que algunos bots no rellenan todos los campos, por lo que puede colarse algo de spam. Otro problema, aunque con solución es que el campo oculto debería ser textarea y no imput, ya que el comentario se escribe en el primero y normalmente sólo suele haber uno. Por lo demás, la idea es buena. Yo no recuerdo haberlo visto en otro lado. Supongo que se trata de una evolución lógica de los anti-spam en el que varias personas sin relación llegan a la misma conclusión. Pasa muchas veces en el mundo científico xD

iOne
13

Por cierto, que se me olvidaba. Si alquien quiere un super-antispam, que haga el formulario de envío en flash. A ver si tienen lo que hay que tener para rellenarlo xD

Manz
14

Friki creo que ya se han detectado spammers (y crawlers) que interpretan javascript (aunque creo recordar que no al 100%). Manuls lo del lector de pantalla es muy fácil de solucionar. Basta con añadirle un tabindex alto de modo que primero acceda a los campos de nombre, comentario... y enviar, no llegando al oculto... O por otra parte, añadir en el atributo alt (que si no me equivoco es el que le dice al invidente de que trata el campo) algo como "No tocar este campo". Elaine, de hecho fue antes del examen. Desde que tenga un poco de tiempo, echo un vistazo a ver si puedo hacerlo para Wordpress. iOne lo del cambio del input por un textarea es muy buena idea. De momento yo no he tenido problemas con el de input y filtra todos los spammers.

meth
15

Este sistema creo que se puede reventar, creando un robot en php que lea la página, y si pone display: none no modifique el campo, creo que lo mejor sigue siendo utilizar CAPTCHA.

Manz
16

Meth como dije antes, con una clase CSS se puede hacer más ilegible para los spammers. Incluso generando al azar el nombre de la clase mediante PHP.

Jose
17

Me lo apunto. Yo hasta ahora pongo en la cola de pendientes de moderación todos los comentarios que incluyen más de un link (el 99,99% es spam). Es un método de andar por casa pero funciona muy bien :)

Luis
20

Muy buen truco, el problema que dices que los navegadores tipo texto rellenarían ese campo se solucionaría mostrando con "display: none" un texto que avisara que es un campo anti-spam y que no se rellenara (no sé si alguien lo ha dicho ya)

Dr. Neubauer
21

Dr. Neubauer, maths expert and well-known gambler in Germany finally developed a roulette system that will shock the world! Absolutely! Why? If too many people use it, it will throw the Casinos out of business! No joke! Reality! Pd: Es broma.

Anonimo
23

Si según decís los spamers no interpretan correctamente javascript... Es más sencillo sustituir el botón del formulario por un hipervínculo con función submit en el onclick. Es más ni siquiera necesita que el hipervínculo esté dentro del form así que es aún más difícil detectarlo.

Marche Radiuju
26

Vaya, nunca habia pensado que encima del Nombre tenias un campo oculto jeje. Siempre me había preguntado como nunca tubiste problemas de SPAM y de más pero ahora ya sé por qué.

Prozac
27

con razón aqui si pasan mis comentarios xD al tener tan singular nick los filtros antispam no dejan mis comentarios ver el mas minimo de luz xD al punto que estoy pensando en cambiarlo!! PD: muy buena solucion Manz!

Dr Frankenstein
29

Dr. Neubauer, maths expert and well-known gambler in Germany finally developed a roulette system that will shock the world! Absolutely! Why? If too many people use it, it will throw the Casinos out of business! No joke! Reality! Pd: Es broma.

Ja Haí
32

Bueno, si se trata de un campo oculto me imagino que tiene el type en HIDDEN por lo que no necesitarias CSS para esconderlo, pero en ese caso es probable que el robot tambien lo omita. Me parece bien si se trata de un campo tipo TEXT, sobre todo porqeu es una implementación muy sencilla e implica por consiguiente un ahorro cuantioso de recursos.

JuDrya
34

Pues tengo un problemilla, creo. Resulta que he añadido el campo oculto pero cuando algun usuario se logea y va a comentar, no le sale la opcion del nombre y Email, solo sale la caja del comentario. Si es alguna opcion que no he marcado por favor diganmela. Otra cosa, teniendo en cuenta que este no es el sitio mas adecuado pero no se donde preguntarlo, es que en el perfil no sale la opcion de subir el avatar. Gracias por todo.

Manz
37

@Rodrigo: El tema es "engañar" a un bot para que piense que se trata de un campo normal. Si lo pones en un campo Hidden, es fácil detectar que no es un campo normal. @Bline: Los campos siempre se han podido ver en HTML, sin embargo, sigue funcionando muy bien para la mayoría de SPAM.

Publica tu opinión