Formulario Anti-SPAM con Javascript y Mootools
Autor: aartiles | Archivado en: General, Internet, JavaScript, Seguridad el día 23/Nov/2007
Últimamente está muy de moda utilizar los formularios de contactos o formularios de envío de comentarios a blogs para hacer SPAM dejando direcciones de sitios en busca de publicidad gratuita. Por otro lado tenemos a los usuarios que usan los formularios para desahogarse y desatar su ira con palabras obscenas que luego los webmasters tienen que sufrir.
Para solucionar esto les propongo un script sencillo que nos puede ayudar a prevenir algunos de estos dolores de cabeza. En este post no estoy ofreciendo un componente, solo un pedazo de código javascript que podemos integrar en nuestra web con conocimientos básicos de programación javascript.
Aunque los chequeos que hace el script son bastante triviales me he auxiliado de la poderosa biblioteca de Mootools para añadir unos toques de efectos visuales y para valerme de su facilidad para gestionar los eventos.
Para utilizar este código necesitarían descargarse Mootools e incluirlo en la página.
1 | <script src="”js/mootools-release-1.11.js”" type="”text/javascript”"><!--mce:0--></script> |
En el HTML debe haber una capa donde notificaremos en caso de detección de SPAM.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | //message es el id de algun textarea dentro de nuestro formulario //<textarea cols="50"></textarea> var txt = $('message'); //log_div es el id de una capa donde mostraremos los posibles errores // var log = $('log_div'); //Añadimos un efecto al div donde mostraremos los errores var fx = new Fx.Styles(log, { duration: 3500, wait: false, transition: Fx.Transitions.Quad.easeOut }); //Añadiendo eventos al textarea txt.addEvents({ //On Focus //Si queremos cambiar el color de background cuando se seleccione //O si queremos eliminar el texto por defecto 'focus': function() { if (txt.value.contains('escribe tu mensaje...')) txt.value = ''; //Cambiando color de background txt.setStyle('background','none #6F6F6F'); }, //On Keyup //Chequeamos que no halla codigo malicioso ni palabra obscenas 'keyup': function() { //Convertimos todo a minúsculas var text = txt.value; text = text.toLowerCase(); //Chequeando que no se escriban direcciones en el mensaje var regexp = /(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?/ var x = regexp.test(text); //Por lo menos que no aparezca nada que comience con www var regexp2 = /(www)/ var y = regexp2.test(text); //Si algunos de los chequeos anteriores dió positivo notificamos en el evento de que hay SPAM if (x==true || y==true){ //Ejecutamos el evento de notificacion de SPAM txt.fireEvent('burn', 'No se permiten direcciones web!'); txt.value = txt.value.replace("www",""); txt.value = txt.value.replace("http://",""); } //Chequeamos que no se utilicen tags de html if(txt.value.contains("")){ txt.value = txt.value.replace(">",""); //Ejecutamos el evento de notificacion de SPAM txt.fireEvent('burn','Eliminando caracteres potencialmente peligrosos'); } //Diccionario de palabras no deseadas words = new Array("viagra","fuck","cialis","porno"); //Chequeamos que no aparezcan ninguna de las palabras anteriores for(var i=0; i &lgt; words.length; i++){ if(txt.value.contains(words[i])){ txt.fireEvent('burn','SPAM reconocido'); txt.value = txt.value.replace(words[i],''); } } }, //On Burn //Este es un tipo de evento creado por nosotros que ejecutaremos siempre que se encuentra un SPAM 'burn': function(text) { //Insertamos el texto el el div donde se muestran los errores log.setHTML(text); //Ejecutamos el efecto para que haga una transición de opacidad fx.start({ //'background-color': ['#990000', '#fff'], 'color': ['#ff9c66', '#101b21'], 'opacity': [1, 0] }); } }); |
Para ver un ejemplo funcionando pueden ir a la página de mi empresa equipo24 e ir a la sección de Contacto y probar algunas palabras como “viagra” o “porno”.
Espero que les sea útil.













