Credit image

¿Te gusta el diseño web? ¡Echa un vistazo a la documentación de LenguajeCSS.com!

Sistema antispam para blogs

¡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.

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».

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.

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.

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.

Escrito por Manz, el , en webmasters. Comentarios recibidos: 40.

40 comentarios de lectores
JV
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
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
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
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
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
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.

Xangel
Xangel
7

Es un sistema muy interesante, la verdad es que es sencillo y útil.

Manz
Manz
8

Se podrían usar clases CSS para ocultar el campo input, dificultando más la tarea del spammer.

Manuls
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
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
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
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
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
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
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
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
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 :)

José Luis Ávila H
José Luis Ávila H
18

Vaya, muchas felicidades... Esa es una excelente idea. Lástima que no me funcione en Blogger, o sí? Saludos.

Romén
Romén
19

Muy buena la técnica Manz, la verdad que es sencilla y efectiva, pero es que hace falta ingenio para pensarla :p ¡Enhorabuena!

Luis
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
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.

Picallo
Picallo
22

Yo instalé spam karma 2 y no tengo problemas. Me va bien.

Anonimo
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.

Tankian
Tankian
24

24 horas con el filtro y ya ha capturado 122 comentarios spam, no hay duda deque funciona

InnovacionWeb
InnovacionWeb
25

Sobre el tema de la lucha contra el spam es interesante el sistema que utilizan en Alzado y que comentan en el siguiente enlace. Spambots, captchas y accesibilidad

Marche Radiuju
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
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!

Netito
Netito
28

Muy buen truco, lo he implementado en una página que usa el típico formulario de "enviar esta noticia a un amigo", y ya ha pillado 20 en el primer día...

Dr Frankenstein
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.

mancillador
mancillador
30

mu wen artí-culo,pero esto no sirve para blogger no?

fede
fede
31

me parece buena idea

Ja Haí
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.

jorge
jorge
33

muy bueno lo voy a tomar en cuenta para mis aplicaciones

JuDrya
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.

Rodrigo
Rodrigo
35

Más que CSS, se puede usar con la propuedad hidden del input, no crees?

Bline
Bline
36

Ya el sistema no es valido, pues se pueden ver los campos en el html

Manz
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.

Dante
Dante
38

Obsoleto desde 2010. Yo mismo diseñe el bot que ignora este "antispam".

Diseño web
Diseño web
39

Muy buen post e interesante ...aunque ha sido postado hace mucho tiempo .. uno no aprende tan rapido. Saludos

Mihai
Mihai
40

@Diseño web: Jjejeej un poco antiguo el post pero es bueno y muy util. Saludos

Publica tu opinión

Si lo deseas, puedes utilizar el siguiente formulario para publicar tu opinión o responder a alguna de las existentes:

Previsualización

Aquí se previsualizará su comentario. Revise que sea correcto antes de publicarlo.