Este y los siguientes capítulos muestran cómo utilizar PHP para validar los datos del formulario.
PHP Formulario de Validación
Piense SEGURIDAD en el tratamiento de las formas de PHP!
Estas páginas mostrarán cómo procesar las formas de PHP con la seguridad en mente. correcta validación de los datos de forma es importante para proteger su forma de hackers y spammers!
El formulario HTML estaremos trabajando en estos capítulos, contiene varios campos de entrada: campos obligatorios y opcionales de texto, botones de radio, y un botón de envío:
Las reglas de validación para el formulario de arriba son los siguientes:
Campo | Las reglas de validación |
---|---|
Nombre | Necesario. + Sólo puede contener letras y espacios en blanco |
Necesario. + Debe contener una dirección válida de correo electrónico (with @ and .) | |
Sitio web | Opcional. Si está presente, debe contener una URL válida |
Comentario | Opcional. Campo de entrada multilínea (textarea) |
Género | Necesario. Debe seleccionarse uno |
En primer lugar vamos a ver el código HTML plano de la forma:
Campos de texto
El nombre, correo electrónico, página web y campos son elementos de entrada de texto y el campo de comentario es un área de texto. El código HTML que se ve así:
Name: <input type="text" name="name">
E-mail: <input type="text" name="email">
Website:
<input type="text" name="website">
Comment:
<textarea name="comment" rows="5" cols="40"></textarea>
Botones de radio
Los campos de género son botones de radio y el código HTML siguiente aspecto:
Gender:
<input type="radio" name="gender"
value="female">Female
<input type="radio" name="gender" value="male">Male
El elemento de formulario
El código HTML del formulario se ve así:
<form method="post" action="<?php echo
htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Cuando se envía el formulario, los datos del formulario se envía con method = "post".
¿Cuál es el $ _SERVER [ "PHP_SELF"] variable?
El $ _SERVER [ "PHP_SELF"] es una variable muy global que devuelve el nombre de archivo del script que se está ejecutando.
Por lo tanto, los $ _SERVER [ "PHP_SELF"] envía los datos del formulario enviado a la página en sí, en lugar de pasar a una página diferente. De esta manera, el usuario recibirá mensajes de error en la misma página que la forma.
¿Cuál es el htmlspecialchars() la función?
El htmlspecialchars() función convierte caracteres especiales a entidades HTML. Esto significa que va a reemplazar caracteres HTML, como <y> a & lt; y & gt ;. Esto evita que los atacantes explotar el código mediante la inyección de código HTML o Javascript (Cross-site Scripting attacks) en formas.
Nota grande en PHP Formulario de Seguridad
El $ _SERVER [ "PHP_SELF"] variable puede ser utilizado por los hackers!
Si PHP_SELF se utiliza en su página, entonces el usuario puede introducir una barra (/) y algo más de Cross Site Scripting (XSS) los comandos a ejecutar.
Cross-site scripting (XSS) es un tipo de vulnerabilidad de seguridad informática se encuentran típicamente en aplicaciones Web. XSS permite a los atacantes inyectar secuencias de comandos del lado del cliente en páginas Web visitadas por otros usuarios.
Supongamos que tenemos el siguiente formulario en una página denominada "test_form.php" :
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
Ahora, si un usuario introduce la URL normales en la barra de direcciones como "http://www.example.com/test_form.php" , el código anterior se traduce a:
<form method="post" action="test_form.php">
Hasta aquí todo bien.
Sin embargo, tenga en cuenta que un usuario entra en la 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 traduce a:
<form method="post" action="test_form.php/"><script>alert('hacked')</script>
Este código añade una etiqueta de script y un comando de alerta. Y cuando se carga la página, el código JavaScript se ejecutarán (the user will see an alert box) . Esto es sólo un ejemplo sencillo e inofensivo cómo la variable PHP_SELF puede ser explotado.
Ser conscientes de que cualquier código JavaScript se puede añadir dentro de la <script> etiqueta! Un hacker puede redirigir al usuario a un archivo en otro servidor, y ese archivo puede contener código malicioso que puede alterar las variables globales o enviar el formulario a otra dirección para guardar los datos de usuario, por ejemplo.
Cómo evitar $ _SERVER [ ""] PHP_SELF Explota?
$ _SERVER [ "PHP_SELF"] exploits se puede evitar mediante el uso de las htmlspecialchars() de función.
El código del formulario debe tener este aspecto:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
El htmlspecialchars() función convierte caracteres especiales a entidades HTML. Ahora bien, si el usuario intenta explotar la variable PHP_SELF, el resultado será el siguiente resultado:
<form method="post" action="test_form.php/"><script>alert('hacked')</script>">
El exploit intento falla, y no se haga daño!
Validar el formulario de datos con PHP
Lo primero que vamos a hacer es pasar a través de todas las variables de PHP htmlspecialchars() función.
Cuando usamos los htmlspecialchars() función; Entonces, si un usuario intenta enviar el siguiente en un campo de texto:
<Script> ubicación. href('http://www.hacked.com') </ script>
- esto no sería ejecutado, ya que se guarda como HTML código escapó, como este:
& Lt; script de & gt; ubicación. href('http://www.hacked.com') & lt; / script & gt;
El código está ahora a salvo de aparecer en una página o en el interior de un correo electrónico.
También vamos a hacer dos cosas más cuando el usuario envía el formulario:
- Personajes de tiras innecesarias (extra space, tab, newline) a partir de los datos de entrada del usuario (with the PHP trim() la función)
- Eliminar barras invertidas (\) de los datos de entrada de usuario (with the PHP stripslashes() función)
El siguiente paso es crear una función que hará toda la comprobación para nosotros (which is much more convenient than writing the same code over and over again) .
Nombraremos la función test_input() .
Ahora, podemos comprobar cada variable $ _POST con el test_input() la función, y el guión se parece a esto:
Ejemplo
<?php
// define variables and set 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;
}
?>
Ejecutar ejemplo » Tenga en cuenta que al comienzo de la secuencia de comandos, comprobamos si el formulario ha sido enviado utilizando $ _SERVER [ "REQUEST_METHOD"]. Si el REQUEST_METHOD es POST, entonces la forma se ha presentado - y debe ser validado. Si no se ha presentado, no tome la validación y mostrar un formulario en blanco.
Sin embargo, en el ejemplo anterior, todos los campos de entrada son opcionales. El script funciona bien, incluso si el usuario no introduce ningún dato.
El siguiente paso es hacer que los campos de entrada necesarios y crear mensajes de error si es necesario.