Validación de formularios PHP
- Página anterior Procesamiento de formularios PHP
- Página siguiente Campos obligatorios del formulario PHP
Esta sección y la siguiente explican cómo usar PHP para verificar los datos del formulario.
Validación de formularios PHP
Consejo:¡Enfatice la seguridad al manejar formularios PHP!
Estas páginas mostrarán cómo manejar de manera segura formularios PHP. Validar adecuadamente los datos del formulario HTML es importante para prevenir ataques de hackers y correos basura!
Los formularios HTML que usaremos más tarde contienen varios campos de entrada: campos de texto obligatorios y opcionales, botones de opción y botones de envío:
El formulario superior utiliza las siguientes reglas de validación:
Campo | Reglas de validación |
---|---|
Nombre | Obligatorio. Debe contener letras y espacios. |
Correo electrónico | Obligatorio. Debe contener una dirección de correo electrónico válida (que incluye @ y .). |
Sitio web | Opcional. Si se completa, debe contener una URL válida. |
Comentario | Opcional. Campo de entrada de múltiples líneas (caja de texto). |
Género | Obligatorio. Debe seleccionar una opción. |
Primero, echemos un vistazo al código HTML puro de este formulario:
Campos de texto
Los campos name, email y website son elementos de entrada de texto, el campo comment es un cuadro de texto. El código HTML es el siguiente:
Nombre: <input type="text" name="name"> Correo electrónico: <input type="text" name="email"> Sitio web: <input type="text" name="website"> Comentario: <textarea name="comment" rows="5" cols="40"></textarea>
Botones de opción
El campo gender es un botón de opción, el código HTML es el siguiente:
Género: <input type="radio" name="gender" value="female">Mujer <input type="radio" name="gender" value="male">Hombre
Elementos del formulario
El código HTML del formulario es el siguiente:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>
Al enviar este formulario, los datos del formulario se envían mediante method="post".
¿Qué es la variable $_SERVER["PHP_SELF"]?
$_SERVER["PHP_SELF"] es una variable superglobal que devuelve el nombre del archivo del script que se está ejecutando.
Por lo tanto, $_SERVER["PHP_SELF"] envía los datos del formulario a la propia página, en lugar de saltar a otra página. De esta manera, el usuario puede obtener información de error en la página del formulario.
¿Qué es la función htmlspecialchars()?
La función htmlspecialchars() convierte caracteres especiales en entidades HTML. Esto significa que caracteres como < y > se reemplazarán por < y >. De esta manera, se puede evitar que los atacantes utilicen HTML o JavaScript injected en el formulario (ataque de script entre sitios) para aprovechar el código.
Consejo importante sobre la seguridad de los formularios PHP
La variable $_SERVER["PHP_SELF"] puede ser utilizada por los hackers!
Si su página utiliza PHP_SELF, los usuarios pueden ingresar una barra baja y ejecutar scripts entre sitios (XSS).
Consejo:El script entre sitios (Cross-site scripting, XSS) es un tipo de vulnerabilidad de seguridad en computadoras, común en aplicaciones web. XSS permite que los atacantes introduzcan scripts clientes en las páginas web que otros usuarios están navegando.
Supongamos que en una página llamada "test_form.php" tenemos el siguiente formulario:
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
Ahora, si el usuario ingresa la URL normal en la barra de direcciones: "http://www.example.com/test_form.php", el código anterior se convertirá en:
<form method="post" action="test_form.php">
Hasta ahora, todo está bien.
Sin embargo, si el usuario ingresa el siguiente URL en la barra de direcciones:
http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
En este caso, el código anterior se convertirá en:
<form method="post" action="test_form.php"/><script>alert('hacked')</script>
Este código agrega un script y un comando de提示. Y cuando esta página se carga, se ejecutará el código JavaScript (el usuario verá una ventana emergente). Esto es solo un caso simple e inofensivo sobre cómo se utiliza la variable PHP_SELF.
Usted debe estar consciente El etiqueta <script> puede agregar cualquier código JavaScript!Hackers can redirect users to a file on another server, where malicious code can change global variables or submit forms to other addresses to save user data, etc.
How to prevent the exploitation of $_SERVER["PHP_SELF"]?
Using the htmlspecialchars() function can prevent the exploitation of $_SERVER["PHP_SELF"].
The form code is as follows:
<form method="post" action="<?php echo ;>
The htmlspecialchars() function converts special characters to HTML entities. Now, if the user tries to exploit the PHP_SELF variable, it will cause the following output:
<form method="post" action="test_form.php/"><script>alert('hacked')</script>">
Inusable, no harm!
PHP form data validation
The first thing we need to do is pass all variables through PHP's htmlspecialchars() function.
After we use the htmlspecialchars() function, if the user tries to submit the following content in a text field:
<script>location.href('http://www.hacked.com')</script>
- The code will not execute because it will be saved as escaped code, like this:
<script>location.href('http://www.hacked.com')</script>
Now this code is safe to display on the page or in an email.
When the user submits the form, we also need to do two things:
- (By using PHP trim() function) remove unnecessary characters from the user input data (extra spaces, tabs, new lines)
- (By using PHP stripslashes() function) remove backslashes (\) from the user input data
Next, we create a check function (this is more efficient than writing the code repeatedly).
We name the function test_input().
Now, we can check each $_POST variable using the test_input() function. The script looks like this:
Example
<?php // Define variables and set them to empty values $name = $email = $gender = $comment = $website = ""; if ($_SERVER["REQUEST_METHOD"] == "POST") { $name = test_input($_POST["name"]); $email = test_input($_POST["email"]); $website = test_input($_POST["website"]); $comment = test_input($_POST["comment"]); $gender = test_input($_POST["gender"]); } function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } ?>
Tenga en cuenta que en el inicio del script, verificamos si el formulario se envió utilizando $_SERVER["REQUEST_METHOD"]. Si REQUEST_METHOD es POST, el formulario se ha enviado y debe validarse. Si no se ha enviado, se saltará la validación y se mostrará un formulario en blanco.
Sin embargo, en el ejemplo anterior, todos los campos de entrada son opcionales. Incluso si el usuario no ingresa ningún dato, el script funcionará correctamente.
El siguiente paso es crear campos de entrada obligatorios y crear mensajes de error que se necesiten.
- Página anterior Procesamiento de formularios PHP
- Página siguiente Campos obligatorios del formulario PHP