Django y el spam de comentarios
Lo simple suele ser elegante (y fácil de comprender y fácil de usar), pero a veces la simplicidad tiene sus problemas. Cuando comencé a leer sobre Django, me gustó su sistema de protección de spam en los comentarios. A mi no me gustan los CAPTCHA, y cualquier servicio del estilo de Akismet me parece un rato exagerado para mis páginas (que son de andar por casa). Por tanto la idea de combatir el spam usando un hash y un campo oculto como honeypot, parecía, sencilla y elegante (tanto para el programador como para el visitante).
Pero como saben los magos "nunca expliques los trucos". Aunque tampoco es que el truco tuviese mucho que esconder: los campos del formulario tienen nombres tan obvios como "email", "name",... Y el honeypot se llama "honeypot" y tiene un estilo "display:none;". Con todas estas pistas está chupado crear un robot que envie comentarios de spam, y como el módulo de comentarios se comparte en muchas aplicaciones Django, este robot se puede usar en multitud de sitios.
Así que a los 2 días de haber activado los comentarios, ya tenía un fan muy insistente: 194.8.75.155. Por tanto el sistema de protección de spam de Django me dejó en bragas a la primera ocasión. Podría haber buscado algún módulo más complejo para proteger los comentarios (como es un problema común a muchos usuarios Django hay multitud de ellos). Pero decidí tomar otro camino: como el código de Django es abierto, decidí modificar ligeramente el sistema de comentarios original.
El cambio fueron muy inocentes:
- Modifiqué el módulo de comentarios, e intercambié el nombre del campo "honeypot" y otro campo del formulario. Así los robots que se basen en enviar un POST, pues van a delatarse al enviar el campo honeypot relleno pensando que envian un dato obligatorio. A los visitantes de la página no les supone ningún problema porque a ellos les da igual como se llamen los campos en el HTML. Tambien cambié el orden de los campos para que algún robot que se tenga memorizada la página no sea capaz de encontrar el campo donde esperaba).
- Cambié el template de los comentarios, para que el campo "honeypot" no se pueda reconocer por el estilo "display:none;"
Como podeis ver, mis medidas anti spam son igual de inocentes que las que tenían los creadores de Django. Pero al menos obligo a los creadores de robot de spam que se tengan que esforzar a crear uno especial para mi página, y a lo mejor no les merece mucho la pena. Bueno, ya contaré por aquí como acabó este experimento...
23 May 2009
