Bots en formularios Drupal. Evítalos

Portada del podcast Drupalízate
Drupalízate es un podcast semanal creado por mí, donde hablo sobre desarrollo web basado en Drupal.
El contenido central es resolver las típicas dudas que pueda tener alguien que tiene o quiere tener una web en Drupal.
Aparte de resolver dudas de "clientes", también se habla de tips, recomendaciones y buenas prácticas para el Developer que recién empiezan en este mundo.
Audio y notas del episodio

Hoy quiero hablar sobre cómo evitar a los molestos bots en tu web.

Ya sea para evitar los intentos de login por fuerza bruta, o para que no envien emails usando los formularios de contacto.

Transcripción automática de este episodio de audio (puede contener errores)

 Buenas, bienvenido otra semana más a Drupalizarte, este podcast donde yo, Robert Menetray, te digo algunos tips para Drupal. Esta semana te quiero recomendar módulos para contraatacar a los bots que te rellenan formularios en la web. Vale, primero de todo, Drupal, como cualquier otro CMS, no se escapa de que hayan intentos de bots, pues lo típico es intentar hacer login como usuario por fuerza bruta, probando nombres de usuarios y contraseñas un poco aleatorias, o por ejemplo si tienes páginas de formulario de contacto, pues intentando enviar mails de contacto así un poco siniestro, a ver si envían mails. O por ejemplo si tienes una plataforma donde usuarios, imagínate una plataforma inmobiliaria, donde tienes usuarios que dan de alta sus inmuebles, en plan idealista, y ponen su mail y esto genera un formulario de contacto en la página del anuncio, donde otros usuarios pueden ir allí y pues deseo contactar porque te quiero comprar la casa, o te quiero comprar el coche si fuera un segundo mano, o cosas de estas. Pero claro, pueden haber bots que intenten enviar a los formularios de todas las páginas texto porque saben que no le va a llegar al administrador de la web, sino que le va a llegar al usuario final que ha subido ese anuncio. Así que cuidao con los bots porque te pueden jugar muy malas pasadas. Desde intentar, entre comillas, hackearte la web y entrar como usuario administrador, si pones admin admin como contraseña, pues cuidao que es factible que venga un bot y puede ver la contraseña admin admin o admin1234, que lo he visto en algunas webs que lo ponían en producción como admin admin. Cuidao. Y después lo típico que es lo que comentaba, enviar mails de forma masiva desde formularios expuestos de la propia web. Así que ¿qué formas tenemos para evitar que esto pase en webs en general? A ver, hay varios módulos ¿vale? Módulos mas o menos recomendados dependiendo de tu caso de uso. Digamos que uno de los mas simples es el honeypot. Honeypot se basa en que el bot va a rellenar el formulario de la forma que buenamente puede y de forma automática. Con lo cual si yo le pongo un campo oculto y por ejemplo le llamo URL o nombre o algo así un nombre genérico, el bot lo va a intentar rellenar con lo que encuentre, con una URL falsa o con un nombre falso. Pero claro, si ese formulario es por ejemplo el formulario de login que pido nombre de usuario y contraseña, si le añado un campo oculto que es URL y el bot va y lo rellena, tu sabes de que ese campo oculto realmente un usuario normal no lo rellenaría. Con lo cual todo el mundo que rellene ese campo básicamente es un bot. Así que es una forma de el honeypot pone una trampa y el que caiga allí sabes de que realmente es un bot. Funciona relativamente bien, pero se le escapan muchos. Hay bots mas sofisticados que detectan si el campo es visible o no y básicamente lo ignoran. Así que tiene una eficacia relativa. Yo lo puedo ver en algunas webs, está bien, no sobrecarga mucho lo que es la web en sí, pero tiene sus problemas. Segundo, hay otros módulos, por ejemplo el captcha y recaptcha, que básicamente te añaden en los formularios el típico captcha de suma 2 más 2 o te ponemos unas letras aquí medio borrosas, escríbeme que letras ves aquí y dale a enviar. Y son los típicos captcha que son feos de narices y desde mi punto de vista molestan al usuario. Efectivos, efectivos son muchísimos, los bots de ahí no pasan. El problema es que por usabilidad al usuario le estás molestando. Estás poniendo un paso más en el formulario que es hacer una operación matemática que normalmente no es compleja pero que molesta o leer unas letras y ponerlas allí. Así que tampoco es la mejor opción según mi criterio. Pero bueno, lo he visto aplicado en muchas webs y realmente es 100% efectivo. Otra opción es usar el módulo captcha pero con el recaptcha de Google. En Google tenemos estos dos modos que se vinculan entre sí y te permite tener el recaptcha de Google. El recaptcha de Google hay dos versiones, lo de memoria, era la versión 2 y la 3. La 2 era la que es la típica que te sale un checkbox que has de marcar y detecta a Google si es un bot o no y si tiene alguna duda que no sé por qué, la mayoría de casos te muestra el seleccioname los taxis, seleccioname los semáforos, seleccioname las motos. Esto de que tienes que ir marcando imágenes para comprobar que no es un bot. Esto es el recaptcha de Google. La versión 3 de recaptcha de Google no te sale el checkbox de este en el formulario sino que si te fijas en las webs que lo tienen implementado normalmente en la esquina inferior derecha de la web te sale un icono de recaptcha de Google y es porque todos los formularios de esa página tienen implementado este recaptcha automático de Google. Es el recaptcha invisible que le llaman a Google. Solo se muestra un icono pequeño en una esquina de la web. Digamos que es menos intrusivo que la versión 2 o que tener un recaptcha normal como una operación matemática pero igualmente digamos que no siempre es tan invisible porque algunas veces Google te salta un mensaje de hey que no tengo claro si es un bot o no, vuelveme a seleccionar aquí los semáforos o lo que sea. Así que en algunos casos sigue molestando al usuario pero bueno es una mejor opción que las anteriores. Otra cosa a tener en cuenta de recaptcha y recaptcha. Esto invalida el tema de cachés en Drupal. Si tienes un formulario que por ejemplo el caso que comentaba antes de idealista o segunda mano tienes un formulario en todas las páginas de anuncios de tu web que son tus contenidos y tienes por ejemplo pues yo que sé 10 mil páginas de contenido en tu web esas 10 mil páginas tienen un formulario. Esas 10 mil páginas con el formulario tienen la caché invalidada con lo cual por rendimiento quizá no es la mejor opción. Es un tema a tener en cuenta que el tema de captchas y recaptchas para el tema de performance se debe ir con cuidado. Y hay otro módulo, hay algunos más pero otro que recomiendo y que últimamente a mí me está funcionando muy bien es el Antibot. Se llama tal cual así Antibot. Buscas Antibot en Drupal y te sale. Básicamente la forma de trabajar este módulo es si no tienes el JavaScript activado es un bot. Con lo cual hoy en día la mayoría de navegadores ya sea desde móvil o desde escritorio tienes el JavaScript activado y en la mayoría de webs si no tienes el JavaScript activado vas a ver cosas mal. El menú no te va a funcionar o el desplegable de no sé qué no te va a funcionar. Al final es hoy en día todas las webs quien más quien menos hace uso de JavaScript. Así que este módulo es no hay JavaScript activado no te muestro el formulario, escríbete directamente y ni lo carga. Por las cosas que he hecho yo es el módulo que mejor está funcionando. No se le escapa casi ningún bot. En mi caso en los últimos meses creo que no me ha llegado ningún bot de spam. Me llegó uno pero creo que no era un bot sino que una persona real haciéndome spam pero por la forma de escribir creo que no era un bot. Y bueno comparado con por ejemplo el Honeypot me llegan, que sí que me llegan varios más digamos que con el Antibot estoy bastante contento. El rendimiento es bastante mejor que los que he comentado antes. Es muy simple, es básicamente activar el módulo y ya está. Y creo que es el que ahora mismo a día de hoy más recomiendo. Eso no significa que en un futuro cambie de opinión pero ahora mismo el que más recomiendo es el Antibot. Seguramente el segundo que más recomiende sea el reCAPTCHA de Google porque visualmente es algo mejor, molesta menos que el CAPTCHA normal. El tercer mejor que recomiendo es el CAPTCHA normal pues que visualmente es muy feo. Y te rompe el estilo visual de la web. Y si no también la última opción sería el Honeypot. Pues que en mi caso al menos se le escapaban muchísimos bots y me seguía enviando mucho spam. Así que lo tuve que al final le puse Antibot en mi caso. Y nada más, que espero que si tienes problemas con bots en tu pal pues que este episodio te haya servido de ayuda. Y si te ha servido de ayuda a menos pues no sé si en Spotify o en Apple Podcast o donde me estés escuchando pero déjame alguna review o estrellitas o lo que sea. Muchas gracias y nos vemos en la siguiente semana con otro episodio de Temática Dupal

¿Tienes algún proyecto en mente?

Si quieres hacer algo en Drupal tal vez puedas contratarme.

Ya sea para consultoría, desarrollo o mantenimiento de sitios web Drupal.