PHP-filterar (Filter)
- Föregående sida PHP Exception
- Nästa sida MySQL-introduktion
PHP-filter används för att validera och filtrera data från osäkra källor, som användarinput.
Vad är PHP-filter?
PHP-filter används för att validera och filtrera data från osäkra källor.
Validering och filtrering av användarinput eller anpassad data är en viktig del av alla webbapplikationer.
Syftet med att designa PHP-filterutökningen är att göra datafiltering enklare och snabbare.
Varför använda filter?
De flesta web-applikationer är beroende av externa inmatningar. Dessa data kommer vanligtvis från användare eller andra applikationer (t.ex. webbtjänster). Genom att använda filter kan du säkerställa att applikationen får rätt inmatningstyp.
Du bör alltid filtrera extern data!
Inputfiltering är en av de viktigaste säkerhetsfrågorna för applikationer.
Vad är extern data?
- Inmatningsdata från formulär
- Cookies
- Servervariabler
- Databasfrågeresultat
Funktioner och filter
För att filtrera variabler, använd en av följande filterfunktioner:
- filter_var() - Filtrera en enskild variabel med ett specifikt filter
- filter_var_array() - Filtrera flera variabler med samma eller olika filter
- filter_input - Hämta en inmatningsvariabel och filtrera den
- filter_input_array - Hämta flera inmatningsvariabler och filtrera dem med samma eller olika filter
I en exempel använder vi filter_var()-funktionen för att validera ett heltal:
<?php $int = 123; if(!filter_var($int, FILTER_VALIDATE_INT)) { echo("Integer is not valid"); } annars { echo("Integer is valid"); } ?>
Ovanstående kod använde filter "FILTER_VALIDATE_INT" för att filtrera variabeln. Eftersom detta heltal är giltigt är utmatningen: "Integer is valid".
Om vi försöker använda en variabel som inte är ett heltal, blir utmatningen: "Integer is not valid".
För en fullständig lista över funktioner och filter, besök vår PHP Filter Referenshandbok.
Validering och Sanitizing
Det finns två filter:
Valideringsfilter:
- Används för att validera användarinput
- Strikta formatregler (t.ex. URL eller E-postvalidering)
- Återger den förväntade typen om det är framgångsrikt, annars FALSE
Sanitizer-filtre:
- Används för att tillåta eller förbjuda specifika tecken i strängen
- Inga dataformatregler
- Återger alltid en sträng
Alternativ och flaggor
Alternativ och flaggor används för att lägga till extra filteralternativ till den specifika filtern.
Olika filter har olika alternativ och flaggor.
I en exempel, använder vi filter_var() och "min_range" samt "max_range"-alternativ för att validera ett heltal:
<?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"); } annars { echo("Integer is valid"); } ?>
Liksom i ovanstående kod måste alternativen placeras i ett relaterat array med namnet "options" om används flaggor behöver de inte vara i arrayen.
Eftersom talet är "300", det ligger inte inom det specificerade intervallet, utmatningen från ovanstående kod kommer att vara "Integer is not valid".
För en fullständig lista över funktioner och filter, besök CodeW3C.com som erbjuds PHP Filter ReferenshandbokDu kan se tillgängliga alternativ och flaggor för varje filter.
Verifiera inmatning
Låt oss försöka verifiera inmatningen från formuläret.
Det första vi behöver göra är att bekräfta att det finns inmatningsdata som vi söker.
Därefter filtrerar vi inmatningsdata med filter_input()-funktionen.
I följande exempel skickas inmatningsvariabeln "email" till en PHP-sida:
<?php if(!filter_has_var(INPUT_GET, "email")) { echo("Input type does not exist"); } annars { if (!filter_input(INPUT_GET, "email", FILTER_VALIDATE_EMAIL)) { echo "E-Mail is not valid"; } annars { echo "E-Mail is valid"; } } ?>
Förklaringsexempel:
I det föregående exemplet finns det en inmatningsvariabel (email) som skickas med GET-metoden:
- Kontrollera om det finns en inmatningsvariabel av typen "GET" för "email"
- Om det finns en inmatningsvariabel, kontrollera om den är en giltig e-postadress
Rensa inmatning
Låt oss försöka rensa URL:en som skickas från formuläret.
Först måste vi bekräfta att det finns inmatningsdata som vi söker.
Därefter använder vi filter_input()-funktionen för att rensa inmatningsdata.
I följande exempel skickas inmatningsvariabeln "url" till en PHP-sida:
<?php if(!filter_has_var(INPUT_POST, "url")) { echo("Input type does not exist"); } annars { $url = filter_input(INPUT_POST, "url", FILTER_SANITIZE_URL); } ?>
Förklaringsexempel:
I det föregående exemplet finns det en inmatningsvariabel (url) som skickas med POST-metoden:
- Kontrollera om det finns en inmatningsvariabel av typen "POST" för "url"
- Om det finns denna inmatningsvariabel, rensa den (ta bort ogiltiga tecken) och lagra den i $url-variabeln
Om inmatningsvariabeln liknar detta: "http://www.W3非o法ol.com.c字符n/", då bör den rensade $url-variabeln vara så här:
http://www.codew3c.com/
Filtrera flera inmatningar
Formulär består vanligtvis av flera inmatningsfält. För att undvika att upprepa anrop till filter_var eller filter_input kan vi använda filter_var_array eller filter_input_array-funktionen.
I detta exempel använder vi filter_input_array() -funktionen för att filtrera tre GET-variabler. Mottagna GET-variabler är ett namn, en ålder och en e-postadress:
<?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("Åldern måste vara ett nummer mellan 1 och 120.<br />"); } elseif (!$result["email"]) { echo("E-post är ogiltig.<br />"); } annars { echo("Användarinput är giltig"); } ?>
Förklaringsexempel:
I det här exemplet finns det tre inmatningsvariabler som skickas via "GET"-metoden (name, age och email)
- Ställ in en array som innehåller namnen på inmatningsvariablerna samt filter som används för specifika inmatningsvariabler
- Anropa filter_input_array-funktionen med parametrar inklusive GET-inmatningsvariabler och den justerade arrayen
- Kontrollera om variabeln $result innehåller de ogiltiga inmatningarna för variablerna "age" och "email". (Om det finns ogiltiga inmatningar,)
Den andra parametern för filter_input_array() -funktionen kan vara en array eller en enskild filter-ID.
Om parametern är en enskild filter-ID, kommer denna specificerade filter att filtrera alla värden i inmatningsarrayen.
Om parametern är en array, måste denna array följa följande regler:
- Det måste vara en relationell array som innehåller de inmatningsvariabler som är nycklar i arrayen (t.ex. "age"-inmatningsvariabel)
- Värdet i denna array måste vara filter-ID eller en array som specificerar filter, flaggor och alternativ
Använd Filter Callback
Genom att använda FILTER_CALLBACK-filter kan du anropa anpassade funktioner och använda dem som filter. På så sätt får vi full kontroll över datafiltering.
Du kan skapa egna anpassade funktioner eller använda befintliga PHP-funktioner.
Specificera metoden för att använda filterfunktioner på samma sätt som att specificera alternativ.
I det följande exemplet använder vi en anpassad funktion för att konvertera alla "_" till mellanslag:
<?php function convertSpace($string) { return str_replace("_", " ", $string); } $string = "Peter_is_a_great_guy!"; echo filter_var($string, FILTER_CALLBACK, array("options"=>"convertSpace")); ?>
Resultatet av ovanstående kod är som följer:
Peter är en fantastisk karl!
Förklaringsexempel:
I det föregående exemplet konverteras alla "_" till mellanslag:
- Skapa en funktion som ersätter "_" med ett mellanslag
- Anropa filter_var()-funktionen, som har FILTER_CALLBACK-filter som parameter samt en array som innehåller våra funktioner
- Föregående sida PHP Exception
- Nästa sida MySQL-introduktion