Foros del Web » Programando para Internet » PHP »

me puedo descansar con formulario solo de mail?

Estas en el tema de me puedo descansar con formulario solo de mail? en el foro de PHP en Foros del Web. Hola: he creado formulario html con php muy sencillito y las consultas envia a un email gmail. No posee nada extra. Tendria que preocuparme por ...
  #1 (permalink)  
Antiguo 06/10/2008, 17:09
 
Fecha de Ingreso: noviembre-2007
Mensajes: 33
Antigüedad: 16 años, 5 meses
Puntos: 0
me puedo descansar con formulario solo de mail?

Hola: he creado formulario html con php muy sencillito y las consultas envia a un email gmail. No posee nada extra.

Tendria que preocuparme por la seguridad mas allá del spam?

como no hay contacto con la base de datos creo es seguro. Me equivoco?

gracias!
  #2 (permalink)  
Antiguo 06/10/2008, 17:38
Avatar de korg1988  
Fecha de Ingreso: junio-2006
Ubicación: Santa Fe, Argentina
Mensajes: 825
Antigüedad: 17 años, 9 meses
Puntos: 19
Respuesta: me puedo descansar con formulario solo de mail?

no tendria porque haber problema siempre y cuando transformes y formatees los datos de entrada de manera que no se puedan producir injecciones, y otras cosas

pero en teoria no hay problema
  #3 (permalink)  
Antiguo 06/10/2008, 19:35
Avatar de geq
geq
 
Fecha de Ingreso: agosto-2006
Ubicación: Rosario
Mensajes: 655
Antigüedad: 17 años, 8 meses
Puntos: 22
Respuesta: me puedo descansar con formulario solo de mail?

Hay un par de puntos que tendrías que tener en cuenta:

- No poner la dirección de destino en el html sino dentro del mismo script php
- Realizar alguna verificación antispam porque se vuelve realmente insoportable la cantidad de spam que se recibe, independientemente del tráfico de tu página... una vez que lo encontraron cag..fuiste!
- Usar alguna función como la siguiente para filtrar todos los campos que se envíen por email y evitar que usen tu script para mandar spam através de tu servidor:
Código PHP:
function ValidarDatos($campo){
        
$badHeads = array("Content-Type:",
                                 
"MIME-Version:",
                                 
"Content-Transfer-Encoding:",
                                 
"Return-path:",
                                 
"Subject:",
                                 
"From:",
                                 
"Envelope-to:",
                                 
"To:",
                                 
"bcc:",
                                 
"cc:");
        foreach(
$badHeads as $valor){ 
            if(
strpos(strtolower($campo), strtolower($valor)) !== false){ 
                
header("HTTP/1.0 403 Forbidden"); 
                
header("Status: 403 Forbidden"); 
                exit;
            }
        }
    }
    foreach(
$_POST as $k=>$v) {
      
ValidarDatos($v);
    } 
Saludos
  #4 (permalink)  
Antiguo 07/10/2008, 06:41
 
Fecha de Ingreso: noviembre-2007
Mensajes: 33
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: me puedo descansar con formulario solo de mail?

Gracias korg1988 y geq: con lo que me detallaron + otro que encontre en el foro para chequear que no se envien los campos vacios quedaría as el .php: esta correcto? (disculpen php es chino 4me)

Código PHP:
<?php

$mail
='[email protected]';


$nombre $_POST['nombre'];
$email $_POST['email'];
$mensaje $_POST['mensaje'];

isset (
$_POST['nombre']);  // esto encontré para no dejar campos en blanco //
isset ($_POST['email']); 
isset (
$_POST['mensaje']);


$thank="gracias.html";

$message "
nombre:"
.$nombre."
email:"
.$email."
mensaje:"
.$mensaje."";

if (
mail($mail,"Formulario de Consulta",$message))
Header ("Location: $thank");


function 
ValidarDatos($campo){
        
$badHeads = array("Content-Type:",
                                 
"MIME-Version:",
                                 
"Content-Transfer-Encoding:",
                                 
"Return-path:",
                                 
"Subject:",
                                 
"From:",
                                 
"Envelope-to:",
                                 
"To:",
                                 
"bcc:",
                                 
"cc:");
        foreach(
$badHeads as $valor){ 
            if(
strpos(strtolower($campo), strtolower($valor)) !== false){ 
                
header("HTTP/1.0 403 Forbidden"); 
                
header("Status: 403 Forbidden"); 
                exit;
            }
        }
    }
    foreach(
$_POST as $k=>$v) {
      
ValidarDatos($v);
    }  

?>
  #5 (permalink)  
Antiguo 07/10/2008, 06:45
Avatar de geq
geq
 
Fecha de Ingreso: agosto-2006
Ubicación: Rosario
Mensajes: 655
Antigüedad: 17 años, 8 meses
Puntos: 22
Respuesta: me puedo descansar con formulario solo de mail?

¡Validá los campos antes de la función mail!

Saludos
  #6 (permalink)  
Antiguo 07/10/2008, 06:51
 
Fecha de Ingreso: noviembre-2007
Mensajes: 33
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: me puedo descansar con formulario solo de mail?

Cita:
Iniciado por geq Ver Mensaje
¡Validá los campos antes de la función mail!

Saludos
Cómo sería eso? (ya me da verguanza la ignorancia)
  #7 (permalink)  
Antiguo 07/10/2008, 06:58
Avatar de geq
geq
 
Fecha de Ingreso: agosto-2006
Ubicación: Rosario
Mensajes: 655
Antigüedad: 17 años, 8 meses
Puntos: 22
Respuesta: me puedo descansar con formulario solo de mail?

Jaja que no te de verguenza. Es la mejor forma de aprender.

Que la función mail() quede al final del script. Después de hacer todo el proceso de validación y demás recién se envía el mensaje. (Lo único que debería estar después es el haeder)

La función puede quedar al final, o en cualquier lugar.
Pero ésta se ejecuta con el foreach
Código PHP:
foreach($_POST as $k=>$v) { 
      
ValidarDatos($v); 
    } 
que lo que hace es pasar por la función ValidarDatos() cada variable que entra por POST. Si la ponés después de mail(), realizará la comprobación después de haber enviado el email y si encontró algo que no debe mandar el email ya va a haber sido enviado.

¿Se entiende?

Saludos
  #8 (permalink)  
Antiguo 07/10/2008, 07:46
 
Fecha de Ingreso: noviembre-2007
Mensajes: 33
Antigüedad: 16 años, 5 meses
Puntos: 0
Respuesta: me puedo descansar con formulario solo de mail?

gracias geq: sabes q lo pongo arriba del todo y tampoco funciona :(
  #9 (permalink)  
Antiguo 07/10/2008, 16:05
Avatar de geq
geq
 
Fecha de Ingreso: agosto-2006
Ubicación: Rosario
Mensajes: 655
Antigüedad: 17 años, 8 meses
Puntos: 22
Respuesta: me puedo descansar con formulario solo de mail?

Te quedaría algo así:

Código PHP:
<?php 

$mail
='[email protected]'
$thank="gracias.html";
$error="error.html"// página de error si no completó correctamente

foreach($_POST as $k=>$v) { 
    
ValidarDatos($v); 
}

$nombre $_POST['nombre']; 
$email $_POST['email']; 
$mensaje $_POST['mensaje']; 

if(!
$nombre||!$email||!$mensaje) {
   
header("Location: $error");
   die();
}

$message "nombre:".$nombre."\nemail:".$email."\nmensaje:".$mensaje

if (
mail($mail,"Formulario de Consulta",$message)) Header ("Location: $thank"); 

die();

function 
ValidarDatos($campo){ 
        
$badHeads = array("Content-Type:"
                                 
"MIME-Version:"
                                 
"Content-Transfer-Encoding:"
                                 
"Return-path:"
                                 
"Subject:"
                                 
"From:"
                                 
"Envelope-to:"
                                 
"To:"
                                 
"bcc:"
                                 
"cc:"); 
        foreach(
$badHeads as $valor){  
            if(
strpos(strtolower($campo), strtolower($valor)) !== false){  
                
header("HTTP/1.0 403 Forbidden");  
                
header("Status: 403 Forbidden");  
                exit; 
            } 
        } 
}
?>
Poné atención en $message y que isset() por si solo no hace nada, tenés que ponerlo como una condición, o se podría reemplazar perfectamente por lo que puse allí.

Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:09.