envio de spam por formularios web

4 de febrero de 2009

En mis tiempos mozos cuando programaba webs en ASP, un antiguo jefe me mandó que hiciera un script en ASP para mandar correo. La idea era que los clientes de los hostings pudieran tener su formulario web de contacto. Desde estos formularios el cliente hacía una llamada al script pasándome el “from” y el “to” del email. Rápida y abispádamente me percaté que cualquiera podía capturar el campo “from” y “to” y enviar correo a su antojo.
La respuesta del jefe fue: “¿Quién se va a mirar el código?... hazlo así y ya tendremos tiempo de mejorarlo”. Otra frase celebre suya era cuando me mandaba a un cliente 30 minutos antes de plegar y me decía: “…total, te pilla de camino a casa”, si claro, pero en sentido contrario a casa.

5 años después veo que aun hay formularios webs de contacto que utilizan esta técnica tan primitiva.
Aquí tenéis un ejemplo real de un código de un formulario de contacto. El campo “recipe” está visible por código, al igual que “required” y “dominio”. Este código está sacado de unos diseñadores web de Bilbao.


Vamos a modificar los campos “recipe” y “required” a nuestro antojo. La única validación que toma el script check.php es el campo “dominio”, por tanto lo dejaremos tal como está en el original.

Ahora enviamos este código miles de veces cambiando el campo “recipe” y ya tenemos nuestro relay de correo para el envío de spam.


¿Cuáles son las medidas a tomar?

Primero: la dirección del remitente no tiene que estar en el código HTLM. Tiene que estar en el lado del servidor. Segundo: validación y formateo todos los valores que llegan al servidor. Lo ideal sería que las direcciones de correo se validaran con expresiones regulares dentro el código PHP/ASP. Tercero: utilizar mod_security para aplicar reglas de ataques y evitar inyecciones SQL, XSS, etc. Cuarto: utilizar códigos de validación como captcha antes de enviar el formulario. Y quinto: diseñar el formulario de envío en varias paginas para poner dificultad a los robots.