[AYUDA] seguridad formulario

  • Autor Autor Baires23
  • Fecha de inicio Fecha de inicio
Baires23

Baires23

Épsilon
Verificado
Verificación en dos pasos activada
Verificado por Binance
Este es el enviar.php quisiera saber si se puede poner seguridad en "$mensaje" ya que es el unico que no pude validar via html 5


PHP:
<?php
if(isset($_POST['email'])) {
// Debes editar las próximas dos líneas de código de acuerdo con tus preferencias
$email_to = "test@dominio.com";
$email_subject = "Contacto desde el sitio web";

// Aquí se deberían validar los datos ingresados por el usuario
if(!isset($_POST['nombre']) ||
!isset($_POST['email']) ||
!isset($_POST['telefono']) ||
!isset($_POST['mensaje'])) {

echo "<b>Ocurrió un error y el formulario no ha sido enviado. </b><br />";
echo "Por favor, vuelva atrás y verifique la información ingresada<br />";
die();
}

$email_message = "Detalles del formulario de contacto:\n\n";
$email_message .= "Nombre y Apellido: " . $_POST['nombre'] . "\n";
$email_message .= "E-mail: " . $_POST['email'] . "\n";
$email_message .= "Teléfono: " . $_POST['telefono'] . "\n";
$email_message .= "Mensaje: " . $_POST['mensaje'] . "\n\n";


// Ahora se envía el e-mail usando la función mail() de PHP
$headers = 'From: '.$email_from."\r\n".
'Reply-To: '.$email_from."\r\n" .
'X-Mailer: PHP/' . phpversion();
@mail($email_to, $email_subject, $email_message, $headers);

echo "¡El formulario se ha enviado con éxito!";
}
?>
 
Pese a que HTML5 te ofrece soporte a validación, antes de insertar datos en una base de datos o enviar un formulario, igualmente te conviene validar 100% del lado del servidor tambien.

No te olvides que puedo hacer un CURL directa a la URL y llenarte de SPAM, o simplemente desde la consola de webmaster (F12) del navegador quitar tus validaciones HTML5 y enviar el formulario sin validar :encouragement: .
 
Pese a que HTML5 te ofrece soporte a validación, antes de insertar datos en una base de datos o enviar un formulario, igualmente te conviene validar 100% del lado del servidor tambien.

No te olvides que puedo hacer un CURL directa a la URL y llenarte de SPAM, o simplemente desde la consola de webmaster (F12) del navegador quitar tus validaciones HTML5 y enviar el formulario sin validar :encouragement: .

por eso necesito reforzar con el archivo enviar.php que elimine caracteres especiales y demas me podes dar una mano en esto ?
 
Implementá esta función (para todos los campos excepto el correo electrónico.)

PHP:
<?php
$nombre = limpiar($_POST['nombre']);

function limpiar($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}
?>

Para validar un mail simplemente valida con este IF

PHP:
<?php
$email_a = 'joe@example.com';

if (filter_var($email_a, FILTER_VALIDATE_EMAIL)) {
    echo "Esta dirección de correo ($email_a) es válida.";
}
?>
 
Implementá esta función (para todos los campos excepto el correo electrónico.)

PHP:
<?php
$nombre = limpiar($_POST['nombre']);

function limpiar($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}
?>

Para validar un mail simplemente valida con este IF

PHP:
<?php
$email_a = 'joe@example.com';

if (filter_var($email_a, FILTER_VALIDATE_EMAIL)) {
    echo "Esta dirección de correo ($email_a) es válida.";
}
?>

¿como quedaria el formulario al final?

La verdad no tengo mucha idea de php y no quisiera mandarme macana

Gracias por tomarte el tiempo de ante mano.
 
Con la funcion anterior y tu codigo, algo así:
PHP:
<?php
function limpiar($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}
 
if(isset($_POST['email'])) { 
// Debes editar las próximas dos líneas de código de acuerdo con tus preferencias 
$email_to = "test@dominio.com"; 
$email_subject = "Contacto desde el sitio web"; 

// Aquí se deberían validar los datos ingresados por el usuario 
if(!isset($_POST['nombre']) || 
!isset($_POST['email']) || 
!isset($_POST['telefono']) || 
!isset($_POST['mensaje'])) { 

echo "<b>Ocurrió un error y el formulario no ha sido enviado. </b><br />"; 
echo "Por favor, vuelva atrás y verifique la información ingresada<br />"; 
die(); 
} 

if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAL)){ die('El email no tiene un formato válido'); }

$email_message = "Detalles del formulario de contacto:\n\n"; 
$email_message .= "Nombre y Apellido: " . limpiar($_POST['nombre']). "\n"; 
$email_message .= "E-mail: " . limpiar($_POST['email']). "\n"; 
$email_message .= "Teléfono: " . limpiar($_POST['telefono']). "\n"; 
$email_message .= "Mensaje: " .limpiar($_POST['mensaje']) . "\n\n"; 


// Ahora se envía el e-mail usando la función mail() de PHP 
$headers = 'From: '.$email_from."\r\n". 
'Reply-To: '.$email_from."\r\n" . 
'X-Mailer: PHP/' . phpversion(); 
@mail($email_to, $email_subject, $email_message, $headers); 

echo "¡El formulario se ha enviado con éxito!"; 
} 
?>

Pero te aconsejo añadirle algún captcha, y comprobar los campos a parte de con isset, con empty para asegurarte de que no estén vacíos.
 
Con la funcion anterior y tu codigo, algo así:
PHP:
<?php
function limpiar($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}
 
if(isset($_POST['email'])) { 
// Debes editar las próximas dos líneas de código de acuerdo con tus preferencias 
$email_to = "test@dominio.com"; 
$email_subject = "Contacto desde el sitio web"; 

// Aquí se deberían validar los datos ingresados por el usuario 
if(!isset($_POST['nombre']) || 
!isset($_POST['email']) || 
!isset($_POST['telefono']) || 
!isset($_POST['mensaje'])) { 

echo "<b>Ocurrió un error y el formulario no ha sido enviado. </b><br />"; 
echo "Por favor, vuelva atrás y verifique la información ingresada<br />"; 
die(); 
} 

if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAL)){ die('El email no tiene un formato válido'); }

$email_message = "Detalles del formulario de contacto:\n\n"; 
$email_message .= "Nombre y Apellido: " . limpiar($_POST['nombre']). "\n"; 
$email_message .= "E-mail: " . limpiar($_POST['email']). "\n"; 
$email_message .= "Teléfono: " . limpiar($_POST['telefono']). "\n"; 
$email_message .= "Mensaje: " .limpiar($_POST['mensaje']) . "\n\n"; 


// Ahora se envía el e-mail usando la función mail() de PHP 
$headers = 'From: '.$email_from."\r\n". 
'Reply-To: '.$email_from."\r\n" . 
'X-Mailer: PHP/' . phpversion(); 
@mail($email_to, $email_subject, $email_message, $headers); 

echo "¡El formulario se ha enviado con éxito!"; 
} 
?>

Pero te aconsejo añadirle algún captcha, y comprobar los campos a parte de con isset, con empty para asegurarte de que no estén vacíos.

Muchas gracias, si ya le puse un captcha tenia otro verificador de e-mail pero me generaba conflicto con el catpcha por ese empece de nuevo uno pero no tengo muchos conocimientos.

Muchas gracias!
 
Atrás
Arriba