Wordpress Hospedagem

¿Cuál es la vulnerabilidad de la función mail() de PHP?

Existe un creciente uso de la modalidad de envío de e-mails masivos a través de formularios web que utilizan PHP. En algunos casos el objetivo es enviar spam, en otros, el anonimato de los mensajes enviados.

Esta modalidad aprovecha la forma en que funciona la función mail() de PHP y se conoce como “Headers Mail Injection”. La misma consiste en aprovecharse de formularios de sitios web que utilicen la función mail() de PHP para el envío de los datos ingresados por el visitante y que, además, estos no validen los datos en forma correcta para evitar este tipo de abusos.

¿Cómo funciona esta modalidad?

Para explicarlo vamos a basarnos en un ejemplo simple: supongamos que nuestro sitio dispone de un campo para el ingreso del e-mail por parte del visitante, de la siguiente forma:

<input name="email" type="text" value="Ingrese su e-mail aqui" />

Luego, la dirección ingresada en este campo es enviada al servidor y es tomada por el script PHP para ser utilizada como FROM en la función mail(), y de esta manera el mensaje que nos llega a nuestro correo tendrá como remitente la dirección ingresada por el visitante. Ahora bien, la función mail() de PHP…

mail(recipiente, asunto, mensaje, cabeceras extras);

… simplemente concatena los parámetros que le son pasados, por lo cual, si en el campo mail del formulario ingresamos lo siguiente:

“spammer@anonimo.com%0ACc:email@victima1.com%0ABcc:email@victima2.com,email@victima3.com”

Allí la primera dirección será el FROM: (dirección de origen que llegará a las víctimas del spam), %0A es el valor hexadecimal del caracter de salto de línea “”, Cc: (Copias) contiene la dirección o direcciones de las víctimas y Bcc: (Copias ocultas) contiene también direcciones de las víctimas del spam.

Parte de la cabecera del e-mail generado por nuestro formulario abusado será:

To: recipient@midominio.com

Subject: Asunto del mensaje

From: spammer@anonimo.com

Cc:email@victima1.com

Bcc:email@victima2.com,email@victima3.com

Con esto, el spammer habrá utilizado nuestro formulario para hacer el envío de correo masivo.

El ejemplo visto es el caso más básico de esta modalidad, ya que a través de la inyección de cabeceras se puede incluso modificar el asunto y hasta el mensaje en sí mismo, hasta el punto de poder enviar mensajes con contenido html.

¿Qué consecuencias tiene esta modalidad?

En primer lugar, el formulario está siendo usado para llevar a cabo un acto con el cual la gran mayoría de nosotros está en desacuerdo; también se está haciendo uso del ancho de banda disponible para el servidor, afectando al resto de los sitios alojados en el mismo. Por último, ante una denuncia de spam, la cuenta emisora deberá ser suspendida por violar nuestros Términos y Condiciones de Servicio, hasta tanto el error sea reparado. Es responsabilidad de cada usuario utilizar código lo suficientemente seguro en su sitio web y corregir esto si fuera necesario.

¿Cómo evitar la utilización de nuestro formulario?

Ante todo, cabe aclarar que esta modalidad se da únicamente en formularios que utilizan la función mail() de PHP para procesar y enviar los datos ingresados por el visitante.

Si utilizas algún script de PHP no elaborado como formailphp, por favor, actualiza el mismo con la versión más reciente verificando que brinde una solución a este tipo de actividad.

Si utilizas un script PHP que tú creaste o posees los conocimientos como para editar el mismo, aquí incorporamos una función que puedes utilizar para validar los datos ingresados de forma eficiente.

<?php
function ValidarDatos($campo){
//Array con las posibles cabeceras a utilizar por un spammer
$badHeads = array("Content-Type:",
"MIME-Version:",
"Content-Transfer-Encoding:",
"Return-path:",
"Subject:",
"From:",
"Envelope-to:",
"To:",
"bcc:",
"cc:");
//Comprobamos que entre los datos no se encuentre alguna de
//las cadenas del array. Si se encuentra alguna cadena se
//dirige a una página de Forbidden
foreach($badHeads as $valor){
if(strpos(strtolower($campo), strtolower($valor)) !== false){
header( "HTTP/1.0 403 Forbidden");
exit;
}
}
}
//Ejemplo de llamadas a la funcion
ValidarDatos($_POST['email']);
ValidarDatos($_POST['asunto']);
ValidarDatos($_POST['mensaje']);
?>

Esta función es básica y puede ser modificada de acuerdo al script que utilices para el procesamiento del formulario e incluso incorporar control de errores.

No olvides incluir los campos ocultos del formulario si estos datos van a ser pasados a través de la función mail().

Esperamos que esta información te sea útil y de ayuda para que entre todos podamos minimizar el impacto causado por este tipo de actos y hacer un uso eficiente del servicio.

Atendimento ao Cliente

24x7x365

SEMPRE AO SEU LADO

  • › Não há limite para o número de consultas e o acesso à história.
  • › Equipe altamente treinada.
  • › Acesso a tutoriais, FAQs e seminários gratuitos.
  • › Suporte em inglês, espanhol e português.
Gerenciar Minha Conta

Conheça as várias opções e ferramentas que proporcionam a sua área do cliente.

CLIQUE AQUI
Help Desk

Como utilizar o serviço de apoio e de resolver as questões mais comuns.

CLIQUE AQUI
Os pagamentos e vencimentos

Informações para saber o status da conta, os futuros vencimentos e renovações.

CLIQUE AQUI