Blog de Gonzalo

Blog de programación de Gonzalo López

VULNERABILIDAD FUNCIÓN MAIL

PHP

La función mail de php es bastante vulnerable para ser hackeada, por eso se recomienda no usar dicha función. Cuando tenemos un formulario de contacto para que el usuario de nuestra web introduzca su php el hacker lo que hará es introducir unos caracteres especiales para spamear. Al pulsar el botón de enviar la información llegaría al servidor y la funcion mail tomaría la dirección de correo para usarla como FROM en el envío del email. Pero, ¿que ocurriría si en vez de una dirección de correo, se introdujese un script malicioso como el siguiente?
spam@emailfalso.com%0ACc:email@victima.com
La función mail tomaría a spam@emailfalso.com como el parámetro FROM, email@victima.com como parámetro Cc. %0A es simplemente el valor hexadecimal de un salto de línea.
Así de sencillo es para un spamer utilizar la funcion mail para enviar emails a sus victimas.
Una solución es usar la librería phpMailer es bastante fácil y sencilla de usar y permite enviar datos adjuntos.
Otra opción es usar la siguiente función:


function ValidarDatos($campo){ 
//Array con las posibles cabeceras usadas por un spammer
$badHeads = array("Content-Type:",
"MIME-Version:",
"Content-Transfer-Encoding:",
"Return-path:",
"Subject:",
"From:",
"Envelope-to:",
"To:",
"bcc:",
"cc:");
//Se comprueba que entre los datos del formulario 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 por cada campo que se usará al enviar el mail.
ValidarDatos($_POST['email']);
ValidarDatos($_POST['asunto']);
ValidarDatos($_POST['mensaje']);
Os recomiendo leer como mandar emails con adjuntos y y vulnerabilidad funcion mail

Compartir en twitter