PHP suodattimet (Filter)

PHP-suodattimet käytetään tietojen validointiin ja suodattamiseen epävarmoista lähteistä, kuten käyttäjän syötteistä.

Mitä PHP-suodattimista tarkoittaa?

PHP-suodattimet käytetään tietojen validointiin ja suodattamiseen epävarmoista lähteistä.

Käyttäjän syötteen tai mukautetun datan validointi ja suodattaminen on osa kaikkea Web-sovellusta.

PHP:n suodattimien laajennuksen suunnittelun tavoitteena oli tehdä tietojen suodattamisesta helpompaa ja nopeampaa.

Miksi käyttää suodattimia?

Lähes kaikki verkkosovellukset riippuvat ulkoisista syötteistä. Tämä data saapuu yleensä käyttäjiltä tai muilta sovelluksilta (esim. verkkopalvelut). Käyttämällä suodattimia voit varmistaa, että ohjelma saa oikean tyyppisen syötteen.

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 with a specified filter
  • filter_var_array() - Filter multiple variables with 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 with 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 PHP Filter -viittaus.

Validating and Sanitizing

There are two filters:

Validating filter:

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

Sanitizing filter:

  • Used to allow or prohibit 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");
 }
?>

Kuten yllä olevassa koodissa, vaihtoehdot täytyy sijoittaa nimettyyn "options"-taulukkoon. Jos käytetään lippuja, niitä ei tarvitse sijoittaa taulukkoon.

Koska kokonaisluku on "300", se ei ole määritellyllä alueella, edellä olevan koodin tuloste on "Integer is not valid".

Täydellisen funktion ja suodattimen luettelon löytämiseksi vieraile CodeW3C.com tarjoamalla PHP Filter -viittaus。Voit nähdä jokaisen suodattimen saatavilla olevat vaihtoehdot ja lippusi.

Syötteen vahvistus

Yritetään vahvistaa lomakkeesta tuleva syöte.

Ensimmäinen asia, jonka meidän täytyy tehdä, on varmistaa, että etsimämme syötetieto on olemassa.

Sitten käytämme filter_input()-funktiota syötteen suodattamiseen.

Alla olevassa esimerkissä syöte-variabele "email" on lähetetty PHP-sivulle:

<?php
if(!filter_has_var(INPUT_GET, "email"))
 {
 echo("Input type does not exist");
 }
else
 {
 if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL))
  {
  echo "E-Mail is not valid";
  }
 else
  {
  echo "E-Mail is valid";
  }
 }
?>

Esimerkki selitys:

Yllä olevassa esimerkissä on "GET"-menetelmällä lähetetty syöte-variabele (email):

  1. Tarkistetaan, onko olemassa "GET"-tyyppinen "email"-syöte-variabele
  2. Jos syöte-variabele on olemassa, tarkistetaan se, onko se kelvollinen sähköpostiosoite

Syötteen puhdistus

Yritetään puhdistaa URL, joka on tullut lomakkeesta.

Ensimmäiseksi meidän täytyy varmistaa, että etsimämme syötetieto on olemassa.

Sitten käytämme filter_input()-funktiota syötteen puhdistamiseen.

Alla olevassa esimerkissä syöte-variabele "url" on lähetetty PHP-sivulle:

<?php
if(!filter_has_var(INPUT_POST, "url"))
 {
 echo("Input type does not exist");
 }
else
 {
 $url = filter_input(INPUT_POST, "url", FILTER_SANITIZE_URL);
 }
?>

Esimerkki selitys:

Yllä olevassa esimerkissä on "POST"-menetelmällä lähetetty syöte-variabele (url):

  1. Tarkistetaan, onko olemassa "POST"-tyyppinen "url"-syöte-variabele
  2. Jos syöte-variabele on olemassa, puhdistetaan se (poistetaan laittomat merkit) ja tallennetaan $url-variabeleeseen

Jos syöte-variabeli on muodossa: "http://www.W3非o法ol.com.c字符n/", niin puhdistettu $url-variabele olisi tällainen:

http://www.codew3c.com/

Useiden syötteiden suodatus

Lomakkeet koostuvat yleensä useista syötekentistä. Välttääksemme filter_var tai filter_input -funktioita toistuvasti kutsumisen, voimme käyttää filter_var_array tai filter_input_array -funktiota.

Tässä esimerkissä käytämme filter_input_array() -funktiota kolmen GET-varioiden suodattamiseen. Vastaanotut GET-varioiden ovat nimi, ikä ja sähköpostiosoite:

<?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("Ikä on oltava luku välillä 1 ja 120.<br />");
 }
elseif (!$result["email"])
 {
 echo("Sähköpostiosoite ei ole kelvollinen.<br />");
 }
else
 {
 echo("Käyttäjän syöte on kelvollinen");
 }
?>

Esimerkki selitys:

Yllä olevassa esimerkissä on kolme "GET"-menetelmällä siirrettyä syöte-variointia (nimi, ikä ja sähköpostiosoite)

  1. Asetetaan taulukko, joka sisältää syöte-varioiden nimet ja suodattimet, jotka on määrätty tiettyjä syöte-variointeja varten
  2. Kutsutaan filter_input_array-funktiota, parametrit ovat GET-syöte ja juuri asetettu taulukko
  3. Tarkistetaan, onko $result-muuttujassa "age" ja "email"-muuttujat laillisia syötteitä. (Jos on laillisia syötteitä,)

filter_input_array() -funktio voi saada toisena parametrina taulukon tai yksittäisen suodattimen ID:n.

Jos parametri on yksittäisen suodattimen ID, niin tämä määritelty suodattin suodattaa kaikki arvot, jotka ovat tulleet syötetaulukosta.

Jos parametri on taulukko, niin tämä taulukko on noudattamaan alla olevia sääntöjä:

  • Täytyy olla assosiaatiotaulukko, jossa sisältyvät syötemuuttujat ovat taulukon avaimia (esim. "age"-syötemuuttuja)
  • Taulukon arvon on oltava suodattimen ID tai määritetty suodatin, merkki ja vaihtoehdot sisältävä taulukko

Suodatinkutsu

FILTER_CALLBACK-suodattimen avulla voit kutsua mukautettua funktiota ja käyttää sitä suodattimena. Tällä tavalla meillä on täysi hallinta datan suodattamisessa

Voit luoda oman mukautetun funktion tai käyttää olemassa olevaa PHP-funktiota

Määritä suunniteltu käyttö suodatinfunktiolle samalla tavalla kuin määrität vaihtoehdot

Alla olevassa esimerkissä käytämme mukautettua funktiota kaikkien "_"-merkkien korvaamiseksi välilyönnillä:

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

Yllä olevan koodin tulos on seuraava:

Peter on hieno mies!

Esimerkki selitys:

Yllä olevassa esimerkissä kaikki "_"-merkit korvataan välilyönnillä:

  1. Luo funktio, joka korvaa "_"-merkin tyhjällä välilyönnillä
  2. Kutsu filter_var()-funktiota, jonka parametrit ovat FILTER_CALLBACK-suodatin ja sisältävä taulukko meidän funktioistamme