Ver Mensaje Individual
  #9 (permalink)  
Antiguo 19/12/2005, 12:25
Lord Sith
 
Fecha de Ingreso: marzo-2003
Mensajes: 29
Antigüedad: 21 años, 8 meses
Puntos: 0
Saludos a todos;

Mi proveedor de hosting también me ha enviado el mismo mensaje alertándome sobre el mal uso de los formularios a través de la función mail(), también me adjuntó una sugerencia de código para colocarlo.

Quisiera saber si alguien puede ayudarme para editar mi archivo correctamente y evitar el mal uso de mis formularios.

Para enviar los correos utilizo los tres archivos.

1.- buzon.htm (El usuario ingresa sus datos desde una página HTML, para lo cual utilizo esta llamada:

<form enctype='multipart/form-data' action='process.php' method='post'>)
2.- process.php
3.- global.inc.php

A continuación pongo el código de process.php:

Código PHP:
<?php
include("global.inc.php");
$errors=0;
$error="Se encontraron los siguientes errores mientras se intentaba enviar su formulario.<ul>";
pt_register('POST','Nombre');
pt_register('POST','PrimerApellido');
pt_register('POST','SegundoApellido');
pt_register('POST','Domicilio');
pt_register('POST','Telefono');
pt_register('POST','Email');
pt_register('POST','ServidorPublico');
pt_register('POST','Hechosqueconstituyenladenuncia');
$Hechosqueconstituyenladenuncia=preg_replace("/(\015\012)|(\015)|(\012)/","&nbsp;<br />"$Hechosqueconstituyenladenuncia);if($Nombre=="" || $PrimerApellido=="" || $Domicilio=="" || $Telefono=="" || $Email=="" || $ServidorPublico=="" || $Hechosqueconstituyenladenuncia=="" ){
$errors=1;
$error.="<li>No ingresó uno o más de los campos requeridos. Por favor regrese e intente de nuevo.";
}
if(!
eregi("^[a-z0-9]+([_\\.-][a-z0-9]+)*" ."@"."([a-z0-9]+([\.-][a-z0-9]+)*)+"."\\.[a-z]{2,}"."$",$Email)){
$error.="<li>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: ".$Nombre."
Primer Apellido: "
.$PrimerApellido."
Segundo Apellido: "
.$SegundoApellido."
Domicilio: "
.$Domicilio."
Telefono: "
.$Telefono."
Email: "
.$Email."
Servidor Publico: "
.$ServidorPublico."
Hechos que constituyen la denuncia: "
.$Hechosqueconstituyenladenuncia."
"
;
$message stripslashes($message);
mail("[email protected]","Formulario de quejas",$message,"From: phpFormGenerator");

header("Refresh: 0;url=http://www.midominio.com/formularios/use/denuncia/gracias.htm");
?><?php 
}
?>
Aquí está el código de global.inc.php

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');
   }

}

?>
El código que me sugiere mi proveedor, para evitar el mal uso del formulario es el siguiente:

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']);
?>
Ahora bien, no sé en qué parte debo colocar el código de comprobación y si tengo que corregirle algo; yo estoy suponiendo que debo ponerlo antes de:
mail("[email protected]","Formulario de quejas",$message,"From: phpFormGenerator")
Pero en realidad no sé.
¿Alguien puede indicarme en qué parte del código debo poner la cuestión de validarlos datos y si a ese código debo corregirle algo?

Mil 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?