Ver Mensaje Individual
  #1 (permalink)  
Antiguo 15/02/2006, 11:54
Lord Sith
 
Fecha de Ingreso: marzo-2003
Mensajes: 29
Antigüedad: 21 años, 9 meses
Puntos: 0
Seguridad en formulario

Saludos a todos,

Hace tiempo hice una pregunta similar, lamentablemente no tuve respuesta. El problema es este: Por segunda ocasión, mi proveedor de hosting me ha enviado un correo alertándome del mal uso de la función mail() de PHP que se encuentra en mis formularios, con la advertencia de que pueden dar de baja mi sitio.

Me han enviado también un ejemplo de código que puede ser incluído en mis formularios para evitar esta situación. La cuestión es que no sé cómo incluirlo (en qué parte) pues mis conocimientos de PHP son poco menos que básicos.

Si alguien pudiera indicarme como incluir ese dichoso código en mi formulario, les estaré eternamente agradecido; a continuación coloco los códigos.

Este es el código del formulario que estoy utilizando:
Código PHP:
<?php
include("global.inc.php");
$errors=0;
$error="Se encontraron los siguientes errores mientras se enviaba la información.<ul>";
pt_register('POST','Email');
pt_register('POST','Nombredelservidorpublico');
pt_register('POST','Apellidodelservidorpublico');
pt_register('POST','Hechosqueconstituyenladenuncia');
$Hechosqueconstituyenladenuncia=preg_replace("/(\015\012)|(\015)|(\012)/","&nbsp;<br />"$Hechosqueconstituyenladenuncia);if($Email=="" || $Nombredelservidorpublico=="" || $Apellidodelservidorpublico=="" || $Hechosqueconstituyenladenuncia=="" ){
$errors=1;
$error.="<li>No llenó uno o más de los espacios requeridos. Por favor regrese e inténtelo de nuevo.";
}
if(!
eregi("^[a-z0-9]+([_\\.-][a-z0-9]+)*" ."@"."([a-z0-9]+([\.-][a-z0-9]+)*)+"."\\.[a-z]{2,}"."$",$Email)){
$error.="<li>Escribió una dirección de correo inválida";
$errors=1;
}
if(
$errors==1) echo $error;
else{
$where_form_is="http".($HTTP_SERVER_VARS["HTTPS"]=="on"?"s":"")."://".$SERVER_NAME.strrev(strstr(strrev($PHP_SELF),"/"));
$message="Nombre completo: ".$Nombrecompleto."
Primer apellido:"
.$Primerapellido."
Segundo apellido:"
.$Segundoapellido."
Calle: "
.$Calle."
Numero:"
.$Numero."
Colonia:"
.$Colonia."
Ciudad:"
.$Ciudad."
Telefono: "
.$Telefono."
Email: "
.$Email."
Nombre del servidor publico: "
.$Nombredelservidorpublico."
Primer apellido del servidor publico: "
.$Apellidodelservidorpublico."
Segundo apellido del servidor publico:"
.$Segundoapellidodelservidor."
Hechos que constituyen la denuncia: "
.$Hechosqueconstituyenladenuncia."
"
;
$message stripslashes($message);
mail("[email protected],","Denuncia de corrupción",$message,"From: phpFormGenerator");

header("Refresh: 0;url=http://www.midominio.com/gracias.htm");
?><?php 
}
?>
El código anterior hace referencia al archivo global.inc.php; este es el código de ese archivo:

Código PHP:
<?php

function pt_register()
{
  
$num_args func_num_args();
   
$vars = array();

   if (
$num_args >= 2) {
       
$method strtoupper(func_get_arg(0));

       if ((
$method != 'SESSION') && ($method != 'GET') && ($method != 'POST') && ($method != 'SERVER') && ($method != 'COOKIE') && ($method != 'ENV')) {
           die(
'The first argument of pt_register must be one of the following: GET, POST, SESSION, SERVER, COOKIE, or ENV');
     }

       
$varname "HTTP_{$method}_VARS";
      global ${
$varname};

       for (
$i 1$i $num_args$i++) {
           
$parameter func_get_arg($i);

           if (isset(${
$varname}[$parameter])) {
               global $
$parameter;
               $
$parameter = ${$varname}[$parameter];
          }

       }

   } else {
       die(
'You must specify at least two arguments');
   }

}

?>
Este es el código que mi proveedor me ha sugerido incluir en mi formulario:

Código PHP:
<?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']);
?>
Ojalá alguien pueda indicarme cómo debe quedar mi código.

Muchas gracias.
__________________
¿Cómo podrás tú, un hombre común, ajeno a los poderosos caminos de la Fuerza, triunfar por encima de uno de los asesinos más peligrosos de la Galaxia?