Impedir el acceso directo a la secuencia de comandos php pero permitir desde index.html

Tengo un formulario de contacto simple donde los usuarios ingresan sus datos y el formulario lo envía a ‘mail.php‘ para pasarlo allí a la cuenta de correo electrónico. El archivo ‘mail.php’ está en mi directorio raíz junto con ‘index.html‘ y el problema que tengo es que no quiero que los usuarios puedan acceder a http://mydomain.com/mail.php directamente a través de su navegador, ya que esto solo enviará un formulario en blanco y podría usarse para enviarme un correo no deseado. Estoy realmente estresado tratando de encontrar una manera que solo permita el acceso a ‘mail.php’ en el formulario. Así es como tengo configurada la forma:

Entonces mi archivo ‘mail.php’ está configurado así, y el encabezado de éxito es una página html con algunas líneas de texto que le permite al usuario saber que su correo electrónico ha enviado, luego los redirige a http://mydomain.com después de 5 segundos.

  

He jugueteado con .htaccess y un sinnúmero de otras cosas, pero nada de lo que hago parece funcionar: bloqueará la página por completo (para que el formulario tampoco pueda acceder a ella) o no la bloqueará en absoluto. También he echado un vistazo a este https://stackoverflow.com/a/409515/3366954 pero tampoco he podido encontrar la manera de hacerlo funcionar. Soy bastante nuevo en html y php pero todo lo demás hasta ahora lo he logrado averiguar. ¿Qué me estoy perdiendo esta vez?

Solo agrega algo de validación a tu script PHP. Por ejemplo:

  

Esto evitará envíos en blanco, sin que sea necesario filtrar por la página de referencia. Como regla general, siempre debe validar la entrada del usuario, de todos modos, porque es una fuente de todo tipo de problemas (piratería informática, errores, comportamiento generalmente inesperado).

No puede bloquear el acceso de los navegadores a la página: cuando un navegador envía un formulario, navega hacia el archivo .php como si el usuario ingresara su URL directamente, con la única diferencia de que también se enviaron datos POST.

Si desea evitar el correo no deseado, debe asegurarse de que su entrada sea correcta. Asegúrese de que los campos obligatorios estén establecidos. (Sí, Ed Cottrell fue más rápido, vea su respuesta)

Lo que debe hacer es validar sus entradas y, si no son correctas, no envíe el formulario.

 if (empty($_POST['name'])) { $errors[] = "You need to enter your name"; } if (empty($_POST['email'])) { $errors[] = "You need to enter your email"; } if (empty($_POST['message'])) { $errors[] = "You need to enter a message"; } if (isset($errors)) { echo "There were errors sending your email:"; echo "
    "; foreach ($errors as $error) { echo "
  • $error
  • "; } echo "
"; } else { // send message }