Estás mirando la versión 3 de mi sitio web, para ver la última versión por favor anda a juque.cl

juque

Juan Pablo Aqueveque: Ingeniero de Sistemas, Diseñador y Desarrollador Web que reside en Temuco, Chile.

Mantenimiento

Publicado por Juan Pablo el 9.Abr.2006 | Comentarios (5)

El 10 de febrero pasado sufrí un despiadado ataque de spammers, por culpa de estos despreciables personajes mi empresa de hosting me restringió la cuenta de correo (sólo podía recibir un correo a cada hora). Luego de muchos correos al Equipo de Soporte me restituyeron el servicio, pero para eso ya habían pasado tres días. Lo desagradable fue que mi dirección de correo apareció en cientos de correos alrededor del mundo vendiendo viagra o ¡vayan a saber ustedes qué cosa!.

Hice un seguimiento del ataque y la única posibilidad que cabía fue que hayan usado mi formulario de contacto. ¿Cómo?, inyectándolo. Éste tipo de ataque consiste en valerse de un parámetro de la función mail en PHP que permite inyectar o cambiar los campos de la cabecera —To, From, CC, BCC— y enviar correos a diestra y siniestra. Por esta razón mi formulario de contacto estuvo fuera de línea hasta hoy. Ahora he "blindado" mi script de contacto con la esperanza de no ser una presa fácil para estos infelices.

Además de lo anterior puse algunas reglas para hacer comentarios, con la intención de elevar un poco el nivel e informar a ciertos personajes que se afanan en publicar off-topics.

Enlace Permanente, Comentarios (5), Publicada en: Sitio

Comentarios

1. claudio
9.Abr.2006

don juque, me dejó intrigado. ¿Será posible que explique con algo más de detalle cómo blindó su formulario?

2. judas
9.Abr.2006

blindar un formulario es bastante sencillo si usas PHP5 (atento tierra ya va a salir PHP6 :P ) y el componente Zend_Mail

http://framework.zend.com/manual/en/zend.mail.html

Niguna accion de filtrado es requerida de parte del programador, y la API es muy similar a la de PHPMailer.

"secure by default" como deberia ser. ;)

Ahora si usas PHP4, lamentablemente les tocará usar google :) iba a escribir un equivalente para PHP4, pero me resisto a reinventar la rueda o poner energias en una version del lenguaje que esta obsoleta y que es casi seguro que en el corto plazo dejara de ser oficialmente soportada.

3. Hermann
9.Abr.2006

Nosotros tuvimos el mismo problema en el trabajo con sitios que tenian formularios de contacto, no tenemos PHP5 así que la solución fué esta funcion en PHP que mi jefe encontró en la documentación de la función mail()…

Espero que sirva a los que todavía usan versiones pre-historicas de PHP :-P

4. juque
9.Abr.2006

@Claudio: A ver si me sigues: Había que validar FUERTEMENTE los campos From, Name, Subject. La idea es no dejar pasar ningún caracter extraño (en especial los saltos de línea "\n" y retorno de página " \r"), así que usé una simple expresión regular para que SOLO se permitan ingresar números y letras. Además utilicé la función que menciona Hermann, que también está el los comentarios de mail (autor original: appel att nr78 dott net). Lo que la función hace es simple, si encuentra campos no aceptados "te bota" del script y le envía un correo (con todos los detalles posibles) al administrador alertándolo del posible ataque.

5. judas
11.Abr.2006

Nunca esta de sobra, ademas, agregarle el header X-Abuse-Info a sus formularios, con una direccion de correo, a la cual puedan llegar los reclamos en caso de abuso. ;-)

En todo caso les aconsejo que no se compliquen la vida, usen Zend_Mail y listo, es mucho menos propenso a errores.