Los filtros PHP se utilizan para validar y filtrar datos de fuentes no seguras, como la entrada del usuario.
Los filtros PHP se utilizan para validar y filtrar datos de fuentes no seguras.
Probar, validar y filtrar la entrada del usuario o datos personalizados son partes importantes de cualquier aplicación web.
Las extensiones de filtro de PHP están diseñadas para hacer que el filtrado de datos sea más fácil y rápido.
Casi todas las aplicaciones web dependen de entradas externas. Estos datos generalmente provienen de usuarios u otras aplicaciones (como servicios web). Al utilizar filtros, puede asegurarse de que su aplicación obtenga el tipo de entrada correcto.
¡Siempre debes filtrar los datos externos!
El filtrado de entradas es uno de los temas de seguridad de aplicaciones más importantes.
¿Qué son los datos externos?
Ingresar datos del formulario
Galletas
datos de servicios web
variables del servidor
Resultados de la consulta de la base de datos
Para filtrar variables, utilice una de las siguientes funciones de filtro:
filter_var() - filtra una sola variable a través de un filtro específico
filter_var_array() - filtra múltiples variables con el mismo filtro o con filtros diferentes
filter_input: toma una variable de entrada y la filtra
filter_input_array: toma múltiples variables de entrada y las filtra a través del mismo filtro o de diferentes
En el siguiente ejemplo, validamos un número entero usando la función filter_var():
<?php $int = 123 ; si ( ! filter_var ( $int , FILTER_VALIDATE_INT ) ) { echo ( " No es un número entero válido " ) ; demás { echo ( " es un número entero legal " ) ; ?>
El código anterior utiliza el filtro "FILTER_VALIDATE_INT" para filtrar variables.
Si intentamos utilizar una variable que no sea entera (como "123abc"), el resultado será: "El número entero no es válido".
Para obtener una lista completa de funciones y filtros, visite nuestro Manual de referencia de filtros PHP.
Hay dos tipos de filtros:
Filtro de validación:
Se utiliza para validar la entrada del usuario.
Reglas de formato estrictas (como URL o validación de correo electrónico)
Devuelve el tipo esperado si tiene éxito o FALSO si falla
Filtro higienizante:
Se utiliza para permitir o prohibir caracteres específicos en una cadena.
Sin reglas de formato de datos
siempre devuelve una cadena
Las opciones y banderas se utilizan para agregar opciones de filtrado adicionales al filtro especificado.
Los diferentes filtros tienen diferentes opciones e indicadores.
En el siguiente ejemplo, validamos un número entero usando filter_var() con las opciones "min_range" y "max_range":
<?php $var = 300 ; $int_options = matriz ( " opciones " => matriz ( " rango_mínimo " => 0 , " rango_máximo " => 256 ) ) ; si ( ! filter_var ( $var , FILTER_VALIDATE_INT , $int_options ) ) { echo ( " No es un número entero válido " ) ; demás { echo ( " es un número entero legal " ) ; ?>
Al igual que el código anterior, las opciones deben colocarse en una matriz relacionada llamada "opciones". Si usa banderas, no es necesario que estén en una matriz.
Dado que el número entero es "300", que no está dentro del rango especificado, el resultado del código anterior será:
no es un número entero legal
Para obtener una lista completa de funciones y filtros, visite nuestro Manual de referencia de filtros PHP. Puede ver las opciones y banderas disponibles para cada filtro.
Intentemos validar la entrada del formulario.
Lo primero que debemos hacer es confirmar que los datos de entrada que buscamos existen.
Luego usamos la función filter_input() para filtrar los datos de entrada.
En el siguiente ejemplo, la variable de entrada "correo electrónico" se pasa a la página PHP:
<?php if ( ! filter_has_var ( INPUT_GET , " correo electrónico " ) ) { echo ( " Sin parámetro de correo electrónico " ) ; demás { si ( ! filter_input ( INPUT_GET , " correo electrónico " , FILTER_VALIDATE_EMAIL ) ) { eco " No es un correo electrónico válido " ; demás { eco " Es un correo electrónico legítimo " ; } ?>
El ejemplo anterior tiene una variable de entrada (correo electrónico) pasada mediante el método "GET":
Compruebe si hay una variable de entrada "correo electrónico" de tipo "GET"
Si la variable de entrada existe, verifique si es una dirección de correo electrónico válida
Intentemos limpiar la URL pasada desde el formulario.
Primero, queremos confirmar que los datos de entrada que estamos buscando existen.
Luego, usamos la función filter_input() para purificar los datos de entrada.
En el siguiente ejemplo, la variable de entrada "url" se pasa a la página PHP:
<?phpif(!filter_has_var(INPUT_GET, "url")){ echo("Sin parámetro de URL");}else{ $url = filter_input(INPUT_GET, "url", FILTER_SANITIZE_URL); echo $url;}?>
El ejemplo anterior tiene una variable de entrada (url) pasada mediante el método "GET":
Compruebe si hay una variable de entrada "url" de tipo "GET"
Si esta variable de entrada existe, desinféctela (elimine los caracteres ilegales) y guárdela en la variable $url
Si la variable de entrada es una cadena similar a esta: "http://www.ruåånoøøob.com/", la variable $url desinfectada se verá así:
Los formularios suelen constar de varios campos de entrada. Para evitar llamadas repetidas a la función filter_var o filter_input, podemos usar filter_var_array o la función filter_input_array.
En este ejemplo, utilizamos la función filter_input_array() para filtrar tres variables GET. Las variables GET recibidas son un nombre, una edad y una dirección de correo electrónico:
<?php $filtros = matriz ( " nombre " => matriz ( " filtro " => FILTER_SANITIZE_STRING ) , " edad " => matriz ( " filtro " => FILTER_VALIDATE_INT , " opciones " => matriz ( " rango_mínimo " => 1 , " rango_máximo " => 120 ) ) , " correo electrónico " => FILTER_VALIDATE_EMAIL ) ; $resultado = filter_input_array ( INPUT_GET , $ filtros ) ; ( ! $resultado [ " edad " ] ) { echo ( " La edad debe estar entre 1 y 120. <br> " ) ; elseif ( ! $resultado [ " correo electrónico " ] ) { echo ( " El correo electrónico es ilegal <br> " ) ; demás { echo ( " Entrada correcta " ) ; } ?>
El ejemplo anterior tiene tres variables de entrada (nombre, edad y correo electrónico) pasadas mediante el método "GET":
Establece una matriz que contiene los nombres de las variables de entrada y filtros para las variables de entrada especificadas.
Llame a la función filter_input_array(), los parámetros incluyen la variable de entrada GET y la matriz recién configurada
Compruebe si las variables "edad" y "correo electrónico" en la variable $resultado tienen entradas ilegales. (Si hay una entrada ilegal, la variable de entrada es FALSA después de usar la función filter_input_array()).
El segundo argumento de la función filter_input_array() puede ser una matriz o el ID de un único filtro.
Si este parámetro es el ID de un único filtro, entonces el filtro especificado filtrará todos los valores en la matriz de entrada.
Si el parámetro es una matriz, la matriz debe seguir las siguientes reglas:
Debe ser una matriz asociativa que contenga variables de entrada que sean las claves de la matriz (como la variable de entrada "edad")
El valor de esta matriz debe ser el ID del filtro o una matriz que especifique el filtro, las banderas y las opciones.
Al utilizar el filtro FILTER_CALLBACK, puede llamar a una función personalizada y usarla como filtro. De esta manera, tenemos control total sobre el filtrado de datos.
Puede crear su propia función personalizada o utilizar una función PHP existente.
Especifique la función de filtro que desea utilizar de la misma manera que la opción especificada. En una matriz asociativa, con el nombre "opciones".
En el siguiente ejemplo, utilizamos una función personalizada para convertir todos los "_" en ".":
<?php función convertSpace ( $cadena ) { devolver str_replace ( " _ " , " . " , $cadena ) ; } $cadena = " www_codercto_com! " ; eco filter_var ( $cadena , FILTER_CALLBACK , matriz ( " opciones " => " convertSpace " ) ) ?> ;
El ejemplo anterior convierte todos los "_" en ".":
Cree una función que reemplace "_" con "."
Llame a la función filter_var() con el filtro FILTER_CALLBACK y la matriz que contiene nuestra función