Tip sencillo para evitar el SPAM en formularios

Tip sencillo para evitar el SPAM en formularios

Fecha: 12-jul-2010 | Autor: .
Guardado en: Desarrollo Web


La semana pasada me registré en Forrst.com, una red social de diseñadores y desarrolladores web (en Inglés), y me topé con un tema que ya hace tiempo había visto en un blog y me pareció super interesante, y dado que ésto me lo recordó ahora, decidí postearlo aquí ;)

Es bien sabido, que todos deseamos evitar el SPAM en formularios de contacto o de comentario, pero a veces los CAPTCHAS se tornan un poco molestos o complejos para los usuarios, y hasta los hay que optan por evitar comentar o contactarnos al ver que deben completar captchas que muchas veces no funcionan del todo correcto.

Hay una forma mucho más sencilla para poder detectar si un formulario está siendo completado por un bot automático dedicado a llenar nuestras casillas de correo y nuestros blogs de SPAM, y tan sólo es necesario utilizar HTML y CSS, veamos como…

La idea es agregar en nuestro formulario, un campo de texto extra (llamado por ejemplo verificacion; o como prefiramos) y ocultarlo mediante CSS. De esta forma los usuarios no lo verán y no lo completarán. En cambio un bot automático sí que llenará el campo, de modo que luego, antes de guardar el comentario o enviar el correo, solo debemos comprobar que el campo verificacion esté vacío y en caso de no estarlo, no proceder. Veamos esto con un ejemplo de código:

1
2
3
4
5
6
7
8
9
10
11
<form method="post" action="enviar.php">
     <label for="nombre">Nombre:</label>
     <input name="nombre" value="" size="20" />
     <label for="email">Email:</label>
     <input name="email" value="" size="25" />
 
     <label for="verificacion" class="verif">¡Si ves esto, no llenes el siguiente campo!</label>
     <input name="verificacion" class="verif" />
 
     <input type="submit" value="Enviar" />
</form>

Ese sería el código HTML del formulario, que se complementaría con el siguiente código CSS para evitar que el campo verificacion se muestre. Notar que de todas formas incluyo una etiqueta (también oculta por CSS) para evitar que un usuario que navegue con CSS deshabilitado complete dicho campo ;)

1
.verif{ display: none; }

Con esa línea de CSS definimos que el campo verificacion (y su label) no sean visibles.

Y por último, a la hora de procesar el formulario, debemos tener en cuenta que el campo verificacion no esté completado:

1
2
3
4
5
6
7
8
<?php
if ($_POST['verificacion'] != ""){
    // Es un SPAMbot
    exit();
}else{
    // Es un usuario real, proceder a enviar el formulario.
}
?>

Bueno, ahora solo resta que vayas a proteger tus formularios! ;)

Si te gustó este post, compártelo:
  • Meneame
  • Twitter
  • Facebook
  • Google Bookmarks
  • Live
  • del.icio.us
  • BarraPunto
  • Technorati
  • Bitacoras.com
Me gusta! A 3 lectores les ha gustado esta entrada.
Loading ... Loading ...

Etiquetado como: , , , ,

Gravatar

Marcelo Ferreiro


Desarrollador web: me especializo en Diseño web, Maquetación xHTML & CSS y Programación PHP & MySQL, e intento aprender un poco más cada día.

35 comentarios, participa!

  1. Lucas

    12. jul, 2010

    Interesante, lo voy aponer en práctica en alguno de mis blogs (de seguro en el que más spam me netra xD ) a pesar de tener un captcha, sigue entrando spam.

    Gracias Marcelo por este tip :)

  2. ign

    12. jul, 2010

    Lo había visto también hace un tiempo y es una excelente idea. Aún mejor si en vez de verificador, ponés un nombre como “last_name”, por decir algo.

    La única desventaja es que si bien es un excelente método (lo tengo andando en una web hace meses y jamás llegó spam) es infinitamente fácil de romper si llegara a masificarse. Es decir, es efectivo mientras los bots no sepan que se usa, o mejor dicho, mientras no lo use mucha gente.

  3. mltulian

    12. jul, 2010

    Muy buen metodo que no se me habia ocurrido ni lo habia visto. Tiene razon @ign, pero por lo pronto, es lo que considero mas efectivo y sencillo para el usuario.

  4. Pollofrito

    17. jul, 2010

    También queda la opción de un CAPTCHA propio, es decir una serie de imágenes con palabras nada deformadas, que rotarán y el script verificaría que coincide con , por ejemplo, 1 de las 10 posibles.

    El autor del post tiene razón…. los CAPTCHAS automáticos son terribles, son miles de veces las que no he conseguido entender la palabra o se me pasó algún carácter y te cansa y se te quitan las ganas de responder posts o artículos.

  5. ricardo

    28. jul, 2010

    Hola buenas, voy utilizar el método ahora mismo. He sufrido en mi web ingresos constantes de comentarios con links a páginas de viagra y estoy harto, le puse la opción de moderar (porque el capcha se lo saltaba sin problemas) yo lo comentarios antes de incluirlos pero cada vez que abro mi correo me encuentro los 5 o 6 correos del spambot.
    un saludo y os cuento que tal si funciona bien os lo haré saber.
    un saludo y muchas gracias.

  6. ricardo

    29. jul, 2010

    Hola buenas, el método me ha funcionado perfectamente,
    enhorabuena y muchas gracias.

  7. PuroVIVE!

    22. ago, 2010

    Gracias man…..te lo agradesco mucho…mi sitio habia sido invadido por mucho spam…..y con esto he quedado mas que feliz!!!!!

    GRACIAS!!!

  8. HogoJp

    13. dic, 2010

    Yo uso un sistema muy parecido y por ahora no tengo queja jeje. Lo que hago es poner un campo input para el nombre de usuario con el name=”" nombre y otro con el valor name, el segundo le meto un display none y pista, misma comprobación que dices en el artículo, y hasta ahora 0 spam :)

  9. Claudio

    27. may, 2011

    Excelente idea!. De todas formas el mayor problema es la masificación. Hasta ahora solo he tenido un mensaje como SPAM así que voy a probar con otros métodos y si no funciona voy con este. Excelente aporte.

  10. Marcelo

    30. may, 2011

    Me alegro que a varios les haya resultado útil… y es verdad que la masificación puede devenir en que los spammers se carguen este método, pero eso siempre sucede, como sucedió con los primeros captchas… y es por eso que día a día terminan siendo más complejos :S

    Saludos!

  11. yaqui

    29. jun, 2011

    estoy haciendo pruebas para un cliente pero me encontrado con la desgracia de que tiene que sera en ASP. ¿Alguna forma sencilla de convertir el codigo?

  12. Maximiliano Jiménez

    09. sep, 2011

    Genial. Muchas gracias.

  13. sergio

    26. sep, 2011

    Muchas gracias, acabo de implementar tu solución a mi sitio web, espero que funcione ya que he creado una especie de muro de comentarios y me lo petan de span del puto viagra, dentro de unos días te dire si me ha funcionado.
    Normalmente las soluciones mas sencillas son las mejores…

  14. Marcelo

    26. sep, 2011

    Hola Sergio, espero que te sirva…
    Yo justo la semana pasada volví a aplicarlo en una web que tenía mucho SPAM y logró reducirlo en aprox. un 90% ;)

    Suerte!

  15. Arturo

    27. sep, 2011

    Excelente tip!

  16. Sergio

    04. oct, 2011

    Aupa Marcelo!!!, muy buena tu solución, llevo más de una semana y ni un span!!!, muchas gracias de nuevo.

  17. Marcelo

    04. oct, 2011

    Me alegro Sergio que a tí también te haya funcionado ;)

  18. Claudio

    06. oct, 2011

    Se me ocurrió algo así al pasar, que tal si a esto, que por cierto es muy útil, le modificamos esto: que el campo oculto se llame nombre y el campo que realmente tiene el nombre se llame de otra forma, por ej nombbrree. Para qué? para que al poner oculto un campo con nombre popular el bot lo complete cosa que con el nombre verificacion puede que viendo este caso lo contemplen y dejen de completar. Es más, yo le agregaría dos campos ocultos: nombre y name, quien quiera hacer spam los completa de cabeza. Espero que se haya entendido.

  19. Claudio

    09. nov, 2011

    Les cuento que, por lo menos el que me hace spam a mi, pasa por alto este truco. Para mi que usa algo que rellena los formularios en el navegador en vez de mandar los datos mediante un robot…

  20. p3ru

    09. feb, 2012

    +1

  21. Nano

    10. feb, 2012

    Muy buenoooo!

  22. mario

    09. mar, 2012

    que les parece la idea de: preguntar cuanto es la suma de 2+5 por ejemplo… o una resta…y comprobar en el servidor el resultado correcto con PHP ?

    u oooootra idea MEJOR, hacer tipo un timer ni bien se genera la pagina del lado del usuario, y si por ejemplo pasan mas de 30 segundos desde que el usuario visualizó la pagina hasta el instante en q el comentario es enviado entonces ahi si seria válido en el sentido de que un humano tardaria un buen rato en leer el post y completar todos los datos mientras un bot lo hace en unos segundos…. ESPERO SE ME ENTIENDA

    se carga la pagina
    comienza a correr el timer
    si tiempo es menor que 30 segundos
    marcar comentario como posible SPAM…

    simple…

  23. Marcelo

    12. mar, 2012

    Hola Mario, son buenas ideas también las que comentas! :D Gracias por compartirlas!

  24. Claudio

    13. mar, 2012

    Mario la segunda idea me parece maravillosa!. Casi no sería molestia para el usuario pero el bot no lo podría detectar además que al estar en JavaScrip menos aún.

  25. Marcelo

    14. mar, 2012

    La contra es que al ser Javascript, justamente no pararíamos a ningún bot, ya que suelen navegar con javascript desactivado :/

  26. Claudio

    14. mar, 2012

    Mejor aún, si el formulario lo generamos por Javascript al navegar desactivado no verían ningún formulario y hasta se puede simular como que no hay ningún formulario para que no vuelvan a intentarlo.

  27. mario

    19. abr, 2012

    la idea es COMBINAR todas estas ideas…. ¿se puede hacer algo parecido a un timer con PHP del lado del servidor?
    Tal vez, usando $_SESSION… la verdad no comprendo muy bien como usar esa variable, vengo de Java donde se pueden hacer maravillas con las sessions sin necesidad de cookies.
    Por eso pregunto a los capos en PHP acá si existe posibidad de implementar una suerte de “timer” con php. Saludos! muy bueno el blog y la onda de la monada acá….

  28. mario

    19. abr, 2012

    sino: setear a 0 una variable “hidden” en html
    SI al enviar esa variable al servidor sigue en cero ENTONCES
    es SPAM
    si variable= “ee22″ (p.e que solo el servidor “sepa” el valor q sera correcto)
    entonces no es spam,

    el valor de la variable hidden se cambia por JScrip cuando corre el timer, si el bot desactiva JScript siempre sera cero…

    ideas para safar del “fuckin” captcha

    marcelo (dueño del blog): al enviar el formulario este q estoy usando y no poner mi mail SE ME BORRÓ TODO EL COMENTARIOOOOOOOOOOO!!!!

  29. Dweb3d.com

    06. jul, 2012

    Muy buen artículo, es una gran tip para evitar el spam, no lo conocía, muy recursivo aporte definitivamente.

  30. Michel

    07. nov, 2012

    pues no me funciono :(
    aun me siguie llegado mucho spam en un sitio que tengo
    por que podria ser?

    no sera algun virus en el servidor o algo asi?

  31. [...] a las soluciones basadas en CSS, Marcelo Ferreiro ofrece en su artículo Tip sencillo para evitar el spam en formularios, una alternativa que toma en cuenta a usuarios que utilicen agentes de usuario que no interpreten [...]

  32. Alejandro Santamaría

    15. ene, 2013

    Muchas gracias, sencillo y muy efectivo. =)

  33. yaquiestoya

    09. mar, 2013

    Me funciono. Muchas gracias

  34. Fernnado

    22. mar, 2013

    Jeeje buen dato, buena explicación de bot que lo llena asta el campo oculto jeje eso lo implementare a mi web ya me aburrió recibir mucho spam departe de estos robots maliciosos

  35. raul

    18. abr, 2013

    modifique un poco este formulario no use css

    lo hize todo en html poniendo un campo invisible
    lo llame nada y en la validacion de php le puse validar el campo nada y va funcionando !

Deja tu opinión