Filtri (Filter) PHP

I filtri PHP vengono utilizzati per verificare e filtrare i dati provenienti da fonti non sicure, come l'input degli utenti.

Cos'è un filtro PHP?

I filtri PHP vengono utilizzati per verificare e filtrare i dati provenienti da fonti non sicure.

La verifica e il filtraggio dell'input degli utenti o dei dati personalizzati sono parte integrante di qualsiasi applicazione web.

L'obiettivo della progettazione dell'estensione dei filtri PHP è rendere più facile e veloce la filtraggio dei dati.

Perché utilizzare i filtri?

Quasi tutte le applicazioni web dipendono da input esterni. Questi dati di solito provengono dagli utenti o da altre applicazioni (ad esempio, servizi web). Utilizzando i filtri, è possibile garantire che l'applicazione riceva il tipo di input corretto.

You should always filter external data!

Input filtering is one of the most important application security issues.

What is external data?

  • Input data from forms
  • Cookies
  • Server variables
  • Database query results

Functions and filters

To filter variables, please use one of the following filter functions:

  • filter_var() - Filter a single variable through a specified filter
  • filter_var_array() - Filter multiple variables through the same or different filters
  • filter_input - Get a single input variable and filter it
  • filter_input_array - Get multiple input variables and filter them through the same or different filters

In the following example, we used the filter_var() function to validate an integer:

<?php
$int = 123;
if(!filter_var($int, FILTER_VALIDATE_INT))
 {
 echo("Integer is not valid");
 }
else
 {
 echo("Integer is valid");
 }
?>

The above code uses the "FILTER_VALIDATE_INT" filter to filter the variable. Since this integer is valid, the output of the code is: "Integer is valid".

If we try to use a non-integer variable, the output is: "Integer is not valid".

For a complete list of functions and filters, please visit our Manuale del Filtraggio PHP.

Validating and Sanitizing

There are two filters:

Validating filters:

  • Used to validate user input
  • Strict format rules (such as URL or E-Mail validation)
  • Returns the expected type if successful, or FALSE if it fails

Sanitizing filters:

  • Used to allow or disallow specified characters in a string
  • No data format rules
  • Always returns a string

Options and flags

Options and flags are used to add additional filtering options to the specified filter.

Different filters have different options and flags.

In the following example, we used filter_var() and "min_range" and "max_range" options to validate an integer:

<?php
$var=300;
$int_options = array(
"options"=>array
 (
 "min_range"=>0,
 "max_range"=>256
 )
);
if(!filter_var($var, FILTER_VALIDATE_INT, $int_options))
 {
 echo("Integer is not valid");
 }
else
 {
 echo("Integer is valid");
 }
?>

Come sopra indicato, le opzioni devono essere inserite in un array chiamato "options". Se si utilizzano i segni, non è necessario inserirli nell'array.

Poiché l'intero è "300", non è nel range specificato, l'output del codice sarà "Integer non è valido".

Per una lista completa di funzioni e filtri, visita CodeW3C.com fornito da Manuale del Filtraggio PHPPuoi vedere tutte le opzioni disponibili e i segni dei filtri.

Verifica dell'input

Proviamo a verificare l'input proveniente dal modulo.

La prima cosa che dobbiamo fare è confermare l'esistenza dei dati di input che stiamo cercando.

Poi filtriamo i dati di input utilizzando la funzione filter_input()

Nell'esempio seguente, la variabile di input "email" viene trasmessa alla pagina PHP:

<?php
if(!filter_has_var(INPUT_GET, "email"))
 {
 echo("Il tipo di input non esiste");
 }
else
 {
 if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL))
  {
  echo "E-Mail non è valido";
  }
 else
  {
  echo "E-Mail è valido";
  }
 }
?>

Spiegazione dell'esempio:

Nell'esempio sopra, c'è una variabile di input (email) trasmessa tramite metodo "GET":

  1. Verifica l'esistenza della variabile di input di tipo "GET" chiamata "email"
  2. Se esiste una variabile di input, verifica se è un indirizzo email valido

Pulizia dell'input

Proviamo a pulire l'URL proveniente dal modulo.

Prima di tutto, dobbiamo confermare l'esistenza dei dati di input che stiamo cercando.

Poi, utilizziamo la funzione filter_input() per pulire i dati di input.

Nell'esempio seguente, la variabile di input "url" viene trasmessa alla pagina PHP:

<?php
if(!filter_has_var(INPUT_POST, "url"))
 {
 echo("Il tipo di input non esiste");
 }
else
 {
 $url = filter_input(INPUT_POST, "url", FILTER_SANITIZE_URL);
 }
?>

Spiegazione dell'esempio:

Nell'esempio sopra, c'è una variabile di input (url) trasmessa tramite metodo "POST":

  1. Verifica l'esistenza della variabile di input di tipo "POST" chiamata "url"
  2. Se esiste questa variabile di input, puliscila (rimuovi i caratteri illegali) e memorizzala nella variabile $url

Se la variabile di input è simile a questo: "http://www.W3非o法ol.com.c字符n/", allora la variabile $url pulita dovrebbe essere così:

http://www.codew3c.com/

Filtraggio di più input

I moduli sono solitamente composti da più campi di input. Per evitare di chiamare di nuovo filter_var o filter_input, possiamo usare filter_var_array o la funzione filter_input_array.

In questo esempio, usiamo la funzione filter_input_array() per filtrare tre variabili GET. Le variabili GET ricevute sono un nome, un'età e un indirizzo email:

<?php
$filters = array
 (
 "name" => array
  (
  "filter"=>FILTER_SANITIZE_STRING
  ),
 "age" => array
  (
  "filter"=>FILTER_VALIDATE_INT,
  "options"=>array
   (
   "min_range"=>1,
   "max_range"=>120
   )
  ),
 "email"=> FILTER_VALIDATE_EMAIL,
 );
$result = filter_input_array(INPUT_GET, $filters);
if (!$result["age"])
 {
 echo("L'età deve essere un numero tra 1 e 120.<br />");
 }
elseif (!$result["email"])
 {
 echo("L'e-mail non è valida.<br />");
 }
else
 {
 echo("L'input dell'utente è valido");
 }
?>

Spiegazione dell'esempio:

Nell'esempio sopra ci sono tre variabili di input trasmesse tramite il metodo "GET" (name, age and email)

  1. Impostare un array che contenga i nomi delle variabili di input e i filtri specifici per le variabili di input
  2. Chiamare la funzione filter_input_array, i parametri includono le variabili di input GET e l'array impostato prima
  3. Verifica se le variabili "age" e "email" del variabile $result hanno input non validi. (Se ci sono input non validi,)

Il secondo parametro della funzione filter_input_array() può essere un array o un singolo ID di filtro.

Se il parametro è l'ID di un singolo filtro, allora questo filtro specifico filtrerà tutti i valori dell'array di input.

Se il parametro è un array, allora questo array deve seguire le seguenti regole:

  • Deve essere un array associativo che contiene le variabili di input come chiavi dell'array (ad esempio, "age" variabile di input)
  • Il valore di questo array deve essere l'ID del filtro o un array che definisce il filtro, i flag e le opzioni

Utilizzo di Filter Callback

Utilizzando il filtro FILTER_CALLBACK, puoi chiamare la funzione personalizzata e utilizzarla come filtro. In questo modo, abbiamo il pieno controllo della filtraggio dei dati.

Puoi creare la tua funzione personalizzata o utilizzare una funzione PHP esistente.

Definire il metodo di utilizzo delle funzioni di filtro è lo stesso del metodo di definizione delle opzioni.

Nell'esempio seguente, utilizziamo una funzione personalizzata per convertire tutti gli "_" in spazi:

<?php
funzione convertSpace($string)
{
return str_replace("_", " ", $string);
}
$string = "Peter_is_a_great_guy!";
echo filter_var($string, FILTER_CALLBACK, array("options"=>"convertSpace"));
?>

Il risultato del codice sopra è il seguente:

Peter è un grande tipo!

Spiegazione dell'esempio:

L'esempio sopra sostituisce tutti gli "_" con spazi:

  1. Creare una funzione che sostituisca "_" con uno spazio
  2. Chiamare la funzione filter_var(), il cui parametro è il filtro FILTER_CALLBACK e un array contenente le nostre funzioni