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)/"," <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!