En el script de correo electrónico PHP de la sección anterior, existe una vulnerabilidad.
Primero, mira el código PHP del capítulo anterior:
<html><head><meta charset="utf-8"><title>Tutorial de codificación (codercto.com)</title></head><body><?phpif (isset($_REQUEST['email'] )) { // Si se recibe el parámetro de correo electrónico, envíe un correo electrónico // Envíe un correo electrónico $email = $_REQUEST['email'] $subject = $_REQUEST['subject'] $message = $_REQUEST['mensaje'] ; mail("[email protected]", $asunto, $mensaje, "De:". $email); echo "Correo enviado correctamente";} else { // Si no hay ningún correo electrónico parámetro y luego Mostrar formulario echo "<form método='post' acción='mailform.php'> Correo electrónico: <input name='email' type='text'><br> Asunto: <input name='asunto' type='text'><br> Mensaje:<br> <textarea name='message' rows='15' cols='40'> </textarea><br> <input type='enviar'> </formulario >";}?></body></html>
El problema con el código anterior es que los usuarios no autorizados pueden insertar datos en el encabezado del correo electrónico a través del formulario de entrada.
¿Qué pasará si el usuario agrega el siguiente texto al correo electrónico en el cuadro de entrada del formulario?
[email protected]%0ACc:[email protected]%0ABcc:[email protected],[email protected],otra [email protected],[email protected]%0ABTo:[email protected]
Como de costumbre, la función mail() coloca el texto anterior en el encabezado del correo electrónico, por lo que el encabezado ahora tiene campos adicionales Cc:, Cco: y Para:. Cuando el usuario hace clic en el botón Enviar, este correo electrónico se enviará a todas las direcciones anteriores.
La mejor manera de evitar la inyección de correo electrónico es validar la entrada.
El siguiente código es similar al del capítulo anterior, pero aquí hemos agregado un validador de entrada para detectar el campo de correo electrónico en el formulario:
<html><head><meta charset="utf-8"><title>Tutorial de codificador (codercto.com)</title></head><body><?phpfunction spamcheck($field){ // filter_var ( ) Filtrar correo electrónico // Usar FILTER_SANITIZE_EMAIL $field=filter_var($field, FILTER_SANITIZE_EMAIL //filter_var() Filtrar correo electrónico // Utilice FILTER_VALIDATE_EMAIL if(filter_var($field, FILTER_VALIDATE_EMAIL)) { return TRUE } else { return FALSE }}if (isset($_REQUEST['email'])){ // Si se recibe el parámetro de correo electrónico, envíe el correo electrónico // Determinar si el correo electrónico es legal $mailcheck = spamcheck($_REQUEST['email']); ($mailcheck==FALSE) { echo "Entrada ilegal" } else { // Enviar correo electrónico $email = $_REQUEST['email'] $subject = $_REQUEST['subject'] ; mensaje'] ; correo("[email protected]", "Asunto: $asunto", $mensaje, "De: $correo electrónico" ); para usar nuestro formulario de correo"; }}else{ // Si no hay ningún parámetro de correo electrónico, muestra el formulario echo "<form método='post' action='mailform.php'> Correo electrónico: <input name='email' tipo ='text '><br> Asunto: <input name='subject' type='text'><br> Mensaje:<br> <textarea name='message' rows='15' cols='40'> </textarea><br> <input type='enviar'> </form>";}?></body></html>
En el código anterior, utilizamos un filtro PHP para validar la entrada:
El filtro FILTER_SANITIZE_EMAIL elimina caracteres ilegales del correo electrónico de la cadena
El filtro FILTER_VALIDATE_EMAIL valida el valor de una dirección de correo electrónico
Puede leer más sobre filtros en nuestro Filtro PHP.