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

297

Vulnerabilidad de la función mail() de PHP



Existe un creciente uso de la modalidad de envio de e-mails masivos a través de formularios web que utilizan PHP para el envio de mails con el objetivo de enviar spam, en algunos casos, y el anonimato de los mensajes enviados en otros caso. Esta modalidad aprovecha la forma en que la función mail() de PHP funciona 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 envio 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 parametros 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"



donde 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 <LF>, 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 el envio de correo masivo a través de nuestro formulario.



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 si mismo hasta el punto de poder enviar mensajes con contenido html.





¿Qué consecuencias tiene esta modalidad?

En primer lugar, nuestro formulario está siendo usado para llevar a cabo un acto con el cual la gran mayoría de nosotros estamos en desacuerdo, también se está haciendo uso del ancho de banda disponible para el servidor afectando al resto e los sitios alojados en el mismo, por lo cual, el sitio en cuestión será suspendido hasta que el inconveniente sea resuelto, por último, ante una denuncia de spam, dicha cuenta deberá ser suspendida de acuerdo a lo previsto en legales de nuestro sitio. Es responsabilidad de cada usuario el 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 utiliza algún script de PHP no elaborado por Ud. como formailphp, por favor, actualice el mismo con la versión más reciente verficando que brinde una solución a este tipo de actividad.



Si utiliza un script PHP creado por Ud. o posee los conocimientos como para editar el mismo, aquí incorporamos una función que puede 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 Ud. utilice para el procesamiento del formulario e incluso incorporar control de errores.

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



Esperamos que esta información le 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.



Por cualquier consulta adicional dirigirse a mesa de soporte.

¿Cómo obtengo la versión de PHP o los módulos instalados en un servidor?

0

Para obtener la versión de PHP o los módulos instalados en un servidor, basta con ejecutar una función en un archivo php.
El siguiente ejemplo muestra cómo obtener toda la información referente a la versión instalada de PHP para su cuenta de hosting.

<?php
    phpinfo();
?>

¿Cuál es el límite de envío de correos?

0

El límite de envío de correos desde una cuenta es de 200 emails por hora por dominio, éstos serán contabilizados por mail y no por destinatario, es decir, si envió 30 emails a una cuenta no se contará como un solo email sino como 30.

¿Cómo puedo acceder a la lectura de mis correos?

0

Usted podrá acceder a sus correos por medio del Webmail, a través de:


Plataforma Linux:

http://www.sudominio.com/webmail
http://www.sudominio.com:2095/

Plataforma Windows:

http://www.sudominio.com/webmail
http://www.sudominio.com:2084/


Ingresando luego los datos de su cuenta:

Usuario: Nombre completo de la cuenta de correo (user@sudominio).

Password: Pass de la cuenta de correo.

¿Cómo puedo cambiar el Password de mis cuentas de correo?

0

Podrá cambiar la clave en cualquiera de sus cuentas de correo en el momento en que lo considere necesario. Es bueno que ocasionalmente realice esta operación para maximizar la seguridad con su correo.  Debe, siempre, cambiar su clave si cree que alguien ajeno puede tener acceso a su cuenta.


Para cambiar una clave de cuenta de correo:

1 . Ingresar al menú >«E-mail» opción >«Administrar cuentas»

2 . Hacer click en el ícono (link) > «llave» de la cuenta de correo que desee cambiar el password para colocar la nueva contraseña.

3 . Colocar la nueva contraseña y clickear el botón > «Establecer nueva contraseña»


Su clave para esta cuenta, ya ha sido modificada.

¿Cómo crear una cuenta de correo?

0

Para la creación de cuentas de correo deberá ingresar al Panel de Control Hosting de su dominio, con su nombre de usuario y contraseña.
Encontrará allí un menú "E-mail" y  dentro de éste la opción de menú "Account manager" o "Administrar cuentas",  liste las cuentas de correo existentes y desde esta misma opción podrá crear cuentas de correos nuevas.

Así de sencillo usted puede realizar estas tareas y otras en forma totalmente autónoma en el momento en que Ud. lo desee y tantas veces como lo necesite.

¿Puedo administrar yo mismo mis cuentas de e-mail?

0

Usted puede administrar su servidor de correo electrónico a través del Panel de Control de su cuenta, ingresando a la opción o "Administrar cuentas" o "Account manager".

Desde allí, puede crear directamente cuentas de correo con su dominio, auto responders, forwards y alias. También podrá acceder al webmail de cada una de las cuentas de correo desde el Panel de Control Hosting.

¿Cómo llevar a cabo el mantenimiento en webmail?

0

Deberá realizar el mantenimiento solicitado sólo una vez en la cuenta que lo requiera.



Luego de esto deberá vaciar la memoria caché de su navegador.



Si utiliza Internet Explorer, la forma de vaciar su cacheo es el siguiente:

Menú >  Herramientas / Opciones de internet


En la solapa: "General" , pulse el botón "Eliminar coockies" , luego 
Aceptar > Eliminar archivos > Aceptar


Reinicie su PC.

Si el problema persiste deberá aguardar a que su ISP refresque sus dispositivos de cacheo.

¿Cómo solucionar el error 0x800ccc90 en outlook?

265

Para poder solucionar el error 0x800ccc90 en Outlook deberá realizar  el siguiente recorrido:


1-Ingrese en  >E-mail Scanner,

2- luego
>Properties,

3- nuevamente
>Properties,

4- elija la opción
  >Servers,

5- Seleccione
POP y elija >Modify,

6- luego tilde
>Fixed host y cambie el valor del "port" a "110".

¿Cómo solucionar el error 0x800CCC0F en la aplicación outlook?

296

El error 0x800CCC0F se debe a que el equipo no puede conectar con el servidor .


Para poder solucionarlo deberá  tener en cuenta los siguientes aspectos:



– Su antivirus, al escanear el correo, puede estar bloqueando la conexión. Algunos tipos de antivirus tienen un modo de funcionamiento que les sitúa entre la conexión a internet y el programa de correo, interceptando los mensajes que envíe y reciba con el programa de correo (realmente su mensaje sale hacia el antivirus, el cual lo escanea, y después lo transmite al servidor de correo).

Este modo de funcionamiento es propenso a dar errores con mensajes de correo grandes y que contienen ficheros adjuntos, especialmente en equipos lentos (poca CPU, RAM o muchos programas ejecutándose)

Para comprobarlo, desactive temporalmente su antivirus y proceda a enviar el mensaje de nuevo. Si resultó exitosa la operación, vuelva a activar el antivirus.



– Si dispone de firewall, puede ser que no tenga el acceso a internet abierto para las aplicaciones Msimn.exe (Outlook express) o Outlook.exe (Microsoft Outlook).



– Del mismo modo, puede que su firewall no tenga abiertos el puerto 110 para recepción de correo y el 25 para el envío de correo.



– Si el error no es habitual puede ser debido a que esté intentando descargar un mensaje con un fichero adjunto bastante grande que esté saturando el escaner de su antivirus.



– Puede haber problemas intermitentes en su conexión a Internet o cortes en la transmisión como consecuencia de saturación. Si comparte su conexión con diferentes equipos puede suceder que no tengan suficiente ancho de banda saliente (hacia internet).

Para comprobarlo, asegúrese de que solamente Ud. utiliza el acceso a internet. Luego envíe el mensaje nuevamente.

(Contacte con su proveedor de conexión a Internet).



Deberá  revisar todos y cada uno de los casos posibles ya que ambos servers de correo, SMTP(25) como POP(110)

Go to Top