Ver Mensaje Individual
  #1 (permalink)  
Antiguo 19/11/2010, 11:33
Avatar de hey_alan
hey_alan
 
Fecha de Ingreso: diciembre-2006
Ubicación: México
Mensajes: 348
Antigüedad: 17 años, 3 meses
Puntos: 8
Vulnerabilidad en función mail() de php

Buen día.

Mi provedor de hosting sugiere que añadamos una función cada que vayamos a usar la función mail() de php:

Vulnerabilidad de la función mail de php

Entonces, uso el siguiente código:

Código PHP:
Ver original
  1. if (isset($_POST["mensaje"])){
  2.  
  3.  
  4. function ValidarDatos($campo){
  5. //Array con las posibles cabeceras a utilizar por un spammer
  6. $badHeads = array("Content-Type:",
  7. "MIME-Version:",
  8. "Content-Transfer-Encoding:",
  9. "Return-path:",
  10. "Subject:",
  11. "From:",
  12. "Envelope-to:",
  13. "To:",
  14. "bcc:",
  15. "cc:");
  16. foreach($badHeads as $valor){
  17. if(strpos(strtolower($campo), strtolower($valor)) !== false){
  18. echo '<p style="text-align:center;">Se ha introducido una cadena que contiene cabeceras php sospechosas:</p>';
  19. echo '<div style="background:#000; margin:10px 40px; color:#eee; padding:5px; border:#553355 1px solid; font-family:Courier New, Courier, monospace;">';
  20. echo htmlspecialchars($_POST["mensaje"]);
  21. echo '</div>';
  22. echo '<p style="text-align:center;">Favor de revisar nuevamente o intentar manualmente. Gracias.</p>';
  23. }
  24. }
  25. }
  26.  
  27.  
  28. echo '<div style="text-align:center;">';
  29.  
  30. $nombre = $_POST["nombre"];
  31. $email = $_POST["email"];
  32. $telefono = $_POST["telefono"];
  33. $mensaje = $_POST["mensaje"];
  34.  
  35. if (!(empty($email))) {
  36. if (!(empty($mensaje))) {
  37.  
  38.  
  39. ValidarDatos($nombre);
  40. ValidarDatos($email);
  41. ValidarDatos($telefono);
  42. ValidarDatos($mensaje);
  43.  
  44. $nombre = htmlspecialchars($nombre);
  45. $email = htmlspecialchars($email);
  46. $telefono = htmlspecialchars($telefono);
  47. $mensaje = htmlspecialchars($mensaje);
  48.  
  49.  
  50. $header = 'From: [email protected]' . "\r\n".'Reply-To:' .$email. "\r\n" .'X-Mailer: PHP/' . phpversion();
  51.  
  52.  
  53. $body = 'Nombre: '.$nombre."\r\n\r\n".'Telefono: '.$telefono."\r\n\r\n".'Email: '.$email."\r\n\r\n\r\n\r\n".'Mensaje: '."\r\n\r\n".$mensaje;
  54.  
  55. if (mail('[email protected]','Mensaje de Alan Marth Media', $body,$header)){
  56.  
  57. echo '<p>Su mensaje se ha enviado correctamente.</p><p class="txt-bld">En breve nos comunicaremos con usted.</p>';
  58.  
  59. }else{
  60.  
  61. echo '<p>Ocurrió un error durante el envío. Trate manualmente:</p><p class="txt-bld">[email protected]</p><p>Disculpe las molestias.</p>';
  62.  
  63. }
  64.  
  65. }else{echo '<p class="txt-bld">Inserte un mensaje. Gracias.</p><p><a href="contacto.php">Reintentar</a>.</p>'; }
  66. }else{echo '<p class="txt-bld">Inserte una dirección email válida. Gracias.</p><p><a href="contacto.php">Reintentar</a>.</p>';}
  67.  
  68. echo '</div>';
  69.  
  70. }else{

El problema es que algunos me cuentan que me han querido escribir un mensaje y se los regresa. Y vale... que las palabras prohibidas como "From:" "To:" o "Subject:" pueden ser utilizadas en un mensaje común.

Mi pregunta es... ¿es realmente necesario? ¿cuál pudiera ser una alternativa?

Muchas gracias por su tiempo. Saludos.
__________________
Alan Marth Media

Diseño web y Publicidad en Morelia, Michoacán