[AYUDA] seguridad formulario

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

Baires23

Épsilon
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
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