El motivo del articulo es servir de preámbulo a otro , en el cual relato con ejemplos un ataque a un procesador de un formulario, con el objetivo de usarlo como pasarela para enviar spam
Tomemos como ejemplo un formulario con los siguientes campos:
Yo creo que dentro de las buenas prácticas que se deben efectuar a la hora de procesar un formulario de este tipo, se encuentran las siguientes:
- Procesar el campo EMAIL y convertirlo a lowercase
- Procesar el campo ASUNTO(si tiene) y convertirlo a lowercase temporalmente para comprobarlo
- Chequear el formato del campo EMAIL, y del campo ASUNTO, de que cumpla las siguientes condiciones:
- No contiene 'bcc:'
- No contiene 'cc:'
- No contiene 'from:'
- No contiene 'subject:'
- No contiene caracteres especiales y de escape, por ejemplo: '','','' en el campo de EMAIL.
- El EMAIL tiene un formato correcto. Se puede usar Expresiones Regulares para esto comprobando que tenga un solo '@', al menos un '.', etc...
- Elegir un método para comprobar la procedencia del envío POST. EJEMPLOS:
- Metodo Referrer:
El procesador 'mail_proc.php' chequea mediante $_SERVER['HTTP_REFERRER'] que la página de donde proviene la petición sea la correcta, por ejemplo: 'http://www.servidor.com/formulario.php'.
EJEMPLO:
$referrer='http://www.servidor.com/formulario.php';if ($_SERVER['HTTP_REFERRER']$referrer) die('error');
- Método de tickets con vencimiento:
El formulario se encuentra en un archivo php, el cual al iniciar establece una variable $_SESSION['ticket_form'] con un valor aleatorio. Este valor se coloca en un campo oculto en el formulario, y se envia por ejemplo con el nombre TICKET.
Cuando el procesador del formulario toma el pedido, chequea que la variable $_POST['ticket'] sea igual a la variable $_SESSION['ticket_form'] en cuyo caso continúa con el trabajo. Si el usuario esta mucho tiempo con el formulario abierto, la session vence y no se envía la variable de session, por lo que el procesador al ver que esta variable no existe, vuelve al formulario para regenerar la session. Por supuesto los datos se traen de nuevo al formulario para q el usuario no deba entrarlos de nuevo.
El metodo REFERRER tiene un inconveniente, y es que si un usuario usa ZONE ALARM o un software parecido, el referrer no es enviado correctamente y llega vacío, por lo que el procesador dará un error. También tengo entendido que se puede engañar esta variable enviando un referrer falso.
Como norma general, cuando se detecta que ha habido un ataque, no mostrar nunca que lo sabemos, en cambio mostrar el mismo cartel como si el mensaje se hubiera enviado, recopilar todos los datos con FOREACH ...(POST,GET y SERVER) y enviarlos a algun mail para chequearlo después. Precisamente de esto se trata mi próximo articulo.
slds a todos desde uruguay
UpAdRiAn