Foros del Web » Programando para Internet » PHP »

procesador de envio de formulario en php "Seguro"

Estas en el tema de procesador de envio de formulario en php "Seguro" en el foro de PHP en Foros del Web. Hola, hace mas de una semana que estoy tratando de saber si este codigo php esta bien escrito y no he conseguido ayuda, tal vez ...
  #1 (permalink)  
Antiguo 29/10/2011, 15:22
 
Fecha de Ingreso: mayo-2008
Mensajes: 8
Antigüedad: 15 años, 10 meses
Puntos: 0
procesador de envio de formulario en php "Seguro"

Hola, hace mas de una semana que estoy tratando de saber si este codigo php esta bien escrito y no he conseguido ayuda, tal vez sea porque es un tema muy dificil .... por eso recurro a Uds., quisiera saber si estan bien validados los input data (server side) contra Inyecciones de Cabeceras, ataques, etc (ya que me han atacado en 2 oportunidades, un simple formulario de contacto ya no es suficiente, debe ser "Seguro" !) .... no soy programadora, he estado leyendo el manual de php pero no es tan sencillo, por eso les suplico !!! a ver si alguien le puede hechar un ojo .... les copio el cogido (php y luego el html del formulario). Tambien se valida el formulario del lado del cliente con javascript.
Desde ya muchas gracias por su ayuda !!!


<?php
if(isset($_POST['boton'])){
if($_POST['nombre'] == ''or !preg_match('/^[a-z0-9()\/\'":\*+|,.; \- !?&#$@]{2,75}$/i',$_POST['nombre'])){
$errors[1] = '<span class="error">Ingrese su nombre</span>';
}else if($_POST['email'] == '' or !preg_match('/^[^@\s]+@([-a-z0-9]+\.)+[a-z]{2,}$/i',$_POST['email'])){
$errors[2] = '<span class="error">Ingrese un email correcto</span>';
}else if($_POST['asunto'] == ''){
$errors[3] = '<span class="error">Ingrese un asunto</span>';
}else if($_POST['mensaje'] == ''){
$errors[4] = '<span class="error">Ingrese un mensaje</span>';
}else{
$dest = "[email protected]"; //Email de destino
$nombre = $_POST['nombre'];
$email = $_POST['email'];
$asunto = $_POST['asunto']; //Asunto
$cuerpo = $_POST['mensaje']; //Cuerpo del mensaje
//Cabeceras del correo
$headers = "From: $nombre $email\r\n"; //Quien envia?
$headers .= "X-Mailer: PHP5\n";
$headers .= 'MIME-Version: 1.0' . "\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n"; //
if(mail($dest,$asunto,$cuerpo,$headers)) {
$result = '<div class="result_ok">Gracias !! Email enviado correctamente</div>';
// si el envio fue exitoso reseteamos lo que el usuario escribio:
$_POST['nombre'] = '';
$_POST['email'] = '';
$_POST['asunto'] = '';
$_POST['mensaje'] = '';
}else{
$result = '<div class="result_fail">Hubo un error al enviar el mensaje</div>';
}
}
}
function safe( $nombre ) {
return( str_ireplace(array( "\r", "\n", "%0a", "%0d", "Content-Type:", "bcc:","to:","cc:" ), "", $nombre ) );
}

?>
<form class='contacto' method='POST' action=''>
<div><label>Tu Nombre:</label><input type='text' class='nombre' name='nombre' value='<?php echo $_POST['nombre']; ?>'><?php echo $errors[1] ?></div>
<div><label>Tu Email:</label><input type='text' class='email' name='email' value='<?php echo $_POST['email']; ?>'><?php echo $errors[2] ?></div>
<div><label>Asunto:</label><input type='text' class='asunto' name='asunto' value='<?php echo $_POST['asunto']; ?>'><?php echo $errors[3] ?></div>
<div><label>Mensaje:</label><textarea rows='6' class='mensaje' name='mensaje'><?php echo $_POST['mensaje']; ?></textarea><?php echo $errors[4] ?></div>
<div><input type='submit' value='Envia Mensaje' class='boton' name='boton'></div>
<?php echo $result; ?>
</form>








Reply With Quote Reply With Quote



+ Reply to Thread
« Previous Thread | Next Thread »
Bookmarks

Digg
del.icio.us
StumbleUpon
Google

Posting Permissions

You may not post new threads
You may not post replies
  #2 (permalink)  
Antiguo 29/10/2011, 15:38
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: procesador de envio de formulario en php "Seguro"

" Inyecciones de Cabeceras, ataques, etc "...

De que tipo es un form para enviar un mail...
No hay conexion de ningun tipo.
¿ Que tipo de ataques tuviste ?

Otra: para que sirve la funcion safe() si nunca lo llamas.
__________________
Mono programando!
twitter.com/eguimariano
  #3 (permalink)  
Antiguo 29/10/2011, 15:57
Avatar de skiper0125  
Fecha de Ingreso: octubre-2010
Ubicación: $this->Mexico('Toluca');
Mensajes: 1.127
Antigüedad: 13 años, 6 meses
Puntos: 511
Respuesta: procesador de envio de formulario en php "Seguro"

Hola que tal.

En base a los ataques que mencionas solo existe uno el cual es envio de correos basura, ya que en cuestión de otro tipo de ataques a tu sistema no existe, ya que no interaccionas con procesos vitales de tu sistema.

saludos
__________________
Recuerda que estamos aquí para orientarte, y no para hacer tu trabajo.
Si mi aporte fue de ayuda, recuerda que agradecer no cuesta nada +1

Skiper0125
  #4 (permalink)  
Antiguo 29/10/2011, 16:25
 
Fecha de Ingreso: mayo-2008
Mensajes: 8
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: procesador de envio de formulario en php "Seguro"

Cita:
Iniciado por SirDuque Ver Mensaje
" Inyecciones de Cabeceras, ataques, etc "...

De que tipo es un form para enviar un mail...
No hay conexion de ningun tipo.
¿ Que tipo de ataques tuviste ?

Otra: para que sirve la funcion safe() si nunca lo llamas.

La funcion Safe la vi en un ejemplo y la agregue ... lei que borrara la info antes de que llegara al servir si esta no era la correcta, por eso menciono que no soy programadora. El formulario, es un Formulario de Contacto con campos muy sencillos como Nombre, email, Mensaje, etc este codigo esta en un mismo file con extension .php, ademas de los estilos CSS y javascript. A que te referis con que no hay conexion de ningun tipo ? Los ataques fueron Inyecciones de Cabeceras, usaba PHPMailer y la ultima version no la tenia actualizada, ahora el problema es que no esta funcionando bien y estoy buscando un reemplazo seguro, no necesito nada mas que un Formulario de Contacto sencillo .... gracias !
  #5 (permalink)  
Antiguo 29/10/2011, 16:37
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: procesador de envio de formulario en php "Seguro"

Cita:
Iniciado por jakie Ver Mensaje
La funcion Safe la vi en un ejemplo y la agregue ... lei que borrara la info antes de que llegara al servir si esta no era la correcta, por eso menciono que no soy programadora. El formulario, es un Formulario de Contacto con campos muy sencillos como Nombre, email, Mensaje, etc este codigo esta en un mismo file con extension .php, ademas de los estilos CSS y javascript. A que te referis con que no hay conexion de ningun tipo ? Los ataques fueron Inyecciones de Cabeceras, usaba PHPMailer y la ultima version no la tenia actualizada, ahora el problema es que no esta funcionando bien y estoy buscando un reemplazo seguro, no necesito nada mas que un Formulario de Contacto sencillo .... gracias !
La cabecera es $headers y lo seteas vos...

$asunto y $cuerpo son lo unicos campos en el que pueden poner contenido.

a lo cual para evitar cualquier "Ataque".

Código PHP:
<?php
// solo admitir letras y numeros.
$cuerpo preg_replace(&#8220;/[^a-zA-Z0-9\s]/”, “”, $string);
$asunto preg_replace(&#8220;/[^a-zA-Z0-9\s]/”, “”, $string);
?>
NOTA: si nunca llamas a la funcion face() no va a tener efecto.
__________________
Mono programando!
twitter.com/eguimariano
  #6 (permalink)  
Antiguo 29/10/2011, 16:52
 
Fecha de Ingreso: mayo-2008
Mensajes: 8
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: procesador de envio de formulario en php "Seguro"

Cita:
Iniciado por SirDuque Ver Mensaje
La cabecera es $headers y lo seteas vos...

$asunto y $cuerpo son lo unicos campos en el que pueden poner contenido.

a lo cual para evitar cualquier "Ataque".

Código PHP:
<?php
// solo admitir letras y numeros.
$cuerpo preg_replace(/[^a-zA-Z0-9s]/“”$string);
$asunto preg_replace(/[^a-zA-Z0-9s]/“”$string);
?>
NOTA: si nunca llamas a la funcion face() no va a tener efecto.
O sea que con este codigo valido los campos Asunto y Cuerpo no ? He leido que las Inyecciones de Cabeceras pueden ocurrir porque te ponen un salto de pagina con /n , /r y agregan cc: y bcc: tambien, con este codigo eso quedaria bloqueado ?

Y este codigo que me pasas lo pongo en culauqier parte del codigo no ? mientras este dentro del php ... perdon por las preguntas, pero el que sabe sabe ... y en este caso yo nooooooo .....

Como tengo PhpMailer, los mails me llegan en blanco, por ejemplo, Nombre: Email: Mensaje: . En el servidor me dicen que esta todo bien, que debe ser el scrip, ya subi la utlima version de class.php.mailer.php pero no dio resultadosss

gracias !
  #7 (permalink)  
Antiguo 29/10/2011, 17:01
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: procesador de envio de formulario en php "Seguro"

Bueno la verdad es que no estas usando phpmailer... estas usando las funciones basicas de php, si queres usar phpmailer podes seguir este post.

Y si no ak encontre un tuto bastante explicado.
Suerte!
__________________
Mono programando!
twitter.com/eguimariano
  #8 (permalink)  
Antiguo 29/10/2011, 17:14
 
Fecha de Ingreso: mayo-2008
Mensajes: 8
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: procesador de envio de formulario en php "Seguro"

Cita:
Iniciado por SirDuque Ver Mensaje
Bueno la verdad es que no estas usando phpmailer... estas usando las funciones basicas de [URL="http://ar2.php.net/manual/es/function.mail.php"]php[/URL], si queres usar phpmailer podes seguir este [URL="http://www.forosdelweb.com/f18/metodo-definitivo-para-mandar-correos-con-phpmailer-que-si-lleguen-hotmail-630896/"]post[/URL].

Y si no [URL="http://web.tursos.com/tutoriales/php/como-hacer-un-formulario-de-contacto-iii-validar-y-enviar-con-php"]ak[/URL] encontre un tuto bastante explicado.
Suerte!
Aca, no tengo nada de phpmailer, solo este nuevo codigo que copie al principio, no necesito ni adjuntar archivos, ni enviar fotos, ni enviar a varias personas en el mismo mail, por eso es que quisiera dejar el phpMailer y utilizar este nuevo codigo mas sencillo. Vos pensas que si le agrego el codigo que me pasaste eso valida los campos contra posibles ataques ?

El tutorial que me pasaste ya lo lei, pero me dijeron que no estaba validado el nombre y que por eso no era seguro ..... es asi ?

Última edición por jakie; 29/10/2011 a las 17:27
  #9 (permalink)  
Antiguo 29/10/2011, 18:15
 
Fecha de Ingreso: mayo-2008
Mensajes: 8
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: procesador de envio de formulario en php "Seguro"

Cita:
Iniciado por skiper0125 Ver Mensaje
Hola que tal.

En base a los ataques que mencionas solo existe uno el cual es envio de correos basura, ya que en cuestión de otro tipo de ataques a tu sistema no existe, ya que no interaccionas con procesos vitales de tu sistema.

saludos
Hola ! Los ataques fueron inyecciones de cabeceras (Header Injections) por el script .php - He leido que siempre se deben validar los input data del aldo del servidor para evitar estos casos. Como no soy programadora queria que alguien me ayude o mas bien corriga el codigo para que quede seguro y ya no tenga estos ataques. Si alguien me ayuda deberia ser como para tonto asi lo entiendo bien y ya quedaria ese codigo para que tambien otros lo usen, el codigo original lo saque de un tutorial, un programador me dijo que no estaba validado el nombre y que por eso no era seguro, y aca estoy ... en el lugar donde los expertos estan, ya que yo no lo soy. Agradeceria infinitamente si alguien me ayuda gracias !
  #10 (permalink)  
Antiguo 30/10/2011, 11:56
 
Fecha de Ingreso: mayo-2008
Mensajes: 8
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: procesador de envio de formulario en php "Seguro"

Cita:
Iniciado por SirDuque Ver Mensaje
La cabecera es $headers y lo seteas vos...

$asunto y $cuerpo son lo unicos campos en el que pueden poner contenido.

a lo cual para evitar cualquier "Ataque".

Código PHP:
<?php
// solo admitir letras y numeros.
$cuerpo preg_replace(/[^a-zA-Z0-9s]/“”$string);
$asunto preg_replace(/[^a-zA-Z0-9s]/“”$string);
?>
NOTA: si nunca llamas a la funcion face() no va a tener efecto.
Hola, agregue el codigo que me diste para validar cuerpo y asunto, pero los mails no llegan, el formulario sale como que se envio bien, pero a la bandeja de entrada no llega, si le quito el codigo si funciona pero no me quedan validados ... tienes alguna idea de porque ?
  #11 (permalink)  
Antiguo 30/10/2011, 13:38
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: procesador de envio de formulario en php "Seguro"

Cita:
Iniciado por jakie Ver Mensaje
Hola, agregue el codigo que me diste para validar cuerpo y asunto, pero los mails no llegan, el formulario sale como que se envio bien, pero a la bandeja de entrada no llega, si le quito el codigo si funciona pero no me quedan validados ... tienes alguna idea de porque ?
Jakie.... si ni intentas entender el codigo, no te gastes hay muchas paginas de freelance (googlealo), te di varias herramientas para que leeas y deduscas como funciona... no es solo copiar y pegar. Si no entendes el codigo vamos a estar 5 dias mas con este tema.

Si no queres aprender PHP te recomiendo freelance, o hay una seccion en el foro para trabajos.

Si queres aprender, deverias intentar comprender el codigo que vos trajiste a esta web y leer los tutoriales que te recomende. Los tutoriales te explican PASO a PASO.

El codigo que te di, no remplaza nada y no borra nada, mas que caracteres especiales. No influye en nada la funcion mail().
__________________
Mono programando!
twitter.com/eguimariano
  #12 (permalink)  
Antiguo 01/11/2011, 17:14
 
Fecha de Ingreso: mayo-2008
Mensajes: 8
Antigüedad: 15 años, 10 meses
Puntos: 0
Respuesta: procesador de envio de formulario en php "Seguro"

Gracias por responderme SirDuque, estoy ... comprendiendo diferentes codigos como me recomendaste, el Tutorial ya lo lei y ya tengo el form funcionando, sin embargo he leido que para que no te Inyecten en las cabeceras o hagan spam masivo con tu form, no debe der posible que hagan un salto de pagina o línea (deben ser eliminados o causar error) en las cabeceras, por ejemplo %0A, agreguen cc, bcc, /n, /r, content type, incluso pueden enviar mensaje y contenido html. Tambien pueden modificarte las variables del la funcion mail, por lo cual deben estar validadas.
El formulario del Tutorial valida con js (cliente) y php (servidor) la pregunta y duda es: si yo voy al formulario web (que supongamos ya esta online) y soy capaz de escribir en el "Tu Nombre" una direccion de mail o ingresar salto de paginas, quiere decir que no estaria seguro y podrian atacarme ? porque veo que solo valida en el caso del nombre que haya escrito algo (que no se deje vacio), deberia tener entonces una funcion que permitiera solo letras como x ej: a-zA-Z ? y lo mismo para el campo "Pais" ($cuerpo), "Asunto" ($asunto) no ? que era lo que me estabas sugiriendo (alfanumericas) ...creo....
Tambien te agradezco la info de los freelance, no sabia que aqui en el foro los puedo encontrar.
Te agradezco si me puedes sacar la duda, porque creo que esas validaciones son para que el usuario no envie un formulario vacio, que esta bien, pero creo que con eso solo no seria seguro contra injections y spammers.
Muchas gracias de nuevo y que bueno que hay gente como vos que saben y nos dan una mano !
  #13 (permalink)  
Antiguo 04/11/2011, 13:39
Avatar de SirDuque  
Fecha de Ingreso: febrero-2009
Ubicación: Paso del Rey, Buenos Aires, Argentina
Mensajes: 975
Antigüedad: 15 años, 2 meses
Puntos: 89
Respuesta: procesador de envio de formulario en php "Seguro"

Cita:
Iniciado por jakie Ver Mensaje
Gracias por responderme SirDuque, estoy ... comprendiendo diferentes codigos como me recomendaste, el Tutorial ya lo lei y ya tengo el form funcionando, sin embargo he leido que para que no te Inyecten en las cabeceras o hagan spam masivo con tu form, no debe der posible que hagan un salto de pagina o línea (deben ser eliminados o causar error) en las cabeceras, por ejemplo %0A, agreguen cc, bcc, /n, /r, content type, incluso pueden enviar mensaje y contenido html. Tambien pueden modificarte las variables del la funcion mail, por lo cual deben estar validadas.
El formulario del Tutorial valida con js (cliente) y php (servidor) la pregunta y duda es: si yo voy al formulario web (que supongamos ya esta online) y soy capaz de escribir en el "Tu Nombre" una direccion de mail o ingresar salto de paginas, quiere decir que no estaria seguro y podrian atacarme ? porque veo que solo valida en el caso del nombre que haya escrito algo (que no se deje vacio), deberia tener entonces una funcion que permitiera solo letras como x ej: a-zA-Z ? y lo mismo para el campo "Pais" ($cuerpo), "Asunto" ($asunto) no ? que era lo que me estabas sugiriendo (alfanumericas) ...creo....
Tambien te agradezco la info de los freelance, no sabia que aqui en el foro los puedo encontrar.
Te agradezco si me puedes sacar la duda, porque creo que esas validaciones son para que el usuario no envie un formulario vacio, que esta bien, pero creo que con eso solo no seria seguro contra injections y spammers.
Muchas gracias de nuevo y que bueno que hay gente como vos que saben y nos dan una mano !
Código PHP:
<?php 
// solo admitir letras y numeros. 
$cuerpo preg_replace(&#8220;/[^a-zA-Z0-9s]/”, “”, $string); 
$asunto preg_replace(&#8220;/[^a-zA-Z0-9s]/”, “”, $string); 
?>
Como mensionas solo admite letras y numeros para evitar (%0A, agreguen cc, bcc, /n, /r, content type)

Tabien podes creer tu codigo si chusmeas preg_replace() vas ver que podes elimnar.... por ejemplo si te molesta content type podes poner esto:

Código PHP:
$string"texto1 texto2 content type texto3 texto4";

$cuerto =  preg_replace("content type"""$string); 
//resultado
echo $cuerpo// "texto1 texto2  texto3 texto4"; 
Con respecto a los spammers/robots etc.. El usuario caricatos tiene varios aportes sobre el tema. En Javascript
De parte del servidor (PHP) solo podes analizar el contenido y fabricar el mail segun tus directivas.
__________________
Mono programando!
twitter.com/eguimariano

Etiquetas: formulario, html, procesador, usuarios
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 16:38.