PHP Filtrere (Filter)
- Forrige side PHP Exception
- Næste side MySQL Introduktion
PHP-filtre bruges til at validere og filtrere data fra usikre kilder, såsom brugerinput.
Hvad er PHP-filtre?
PHP-filtre bruges til at validere og filtrere data fra usikre kilder.
Validering og filtrering af brugerinput eller brugerdefinerede data er en vigtig del af enhver web-applikation.
Formålet med at designe PHP-filtreudvidelser er at gøre datafiltrering lettere og hurtigere.
Hvorfor bruge filtre?
De fleste web-applikationer afhænger af eksterne input. Disse data kommer normalt fra brugere eller andre applikationer (som web-tjenester). Ved at bruge filtre kan du sikre, at applikationen modtager den korrekte inputtype.
Du bør altid filtrere eksterne data!
Input-filtrering er en af de vigtigste sikkerhedsmæssige emner for applikationer.
Hvad er eksternt data?
- Indtastningsdata fra formularen
- Cookies
- Servervariabler
- Databasekviklingsresultater
Funktioner og filtrer
For at filtrere variabler, brug en af følgende filterfunktioner:
- filter_var() - Filtrer en enkelt variabel med en specificeret filtreringsfunktion
- filter_var_array() - Filtrer flere variabler med samme eller forskellige filtreringsfunktioner
- filter_input - Henter en inputvariabel og filtrerer den
- filter_input_array - Henter flere inputvariabler og filtrerer dem med samme eller forskellige filtreringsfunktioner
I nedenstående eksempel bruger vi filter_var() funktionen til at validere et heltal:
<?php $int = 123; if(!filter_var($int, FILTER_VALIDATE_INT)) { echo("Integer is not valid"); } else { echo("Integer is valid"); } ?>
ovenstående kode bruger "FILTER_VALIDATE_INT"-filtret til at filtrere variablen. Da dette heltal er gyldigt, er outputtet: "Integer is valid".
Hvis vi forsøger at bruge en ikke-integral variabel, vil outputtet være: "Integer is not valid".
For en fuld liste over funktioner og filtrer, besøg vores PHP Filter Reference Manual。
Validerings- og Sanitizing-filtre
Der er to filtreringsfunktioner:
Valideringsfiltre:
- Bruges til at validere brugerinput
- Strikte formatregler (f.eks. URL- eller e-mail-verifikation)
- Returnerer den forventede type, hvis succesfuld, ellers returnerer FALSE
Sanitizing-filtre:
- Bruges til at tillade eller forbyde specifikke tegn i en streng
- Ingen dataformatregler
- Returnerer altid en streng
Indstillinger og flag
Indstillinger og flag bruges til at tilføje ekstra filtreringsindstillinger til den angivne filtreringsfunktion.
Forskellige filtreringsfunktioner har forskellige indstillinger og flag.
I nedenstående eksempel bruger vi filter_var() og "min_range" samt "max_range"-indstillinger til at validere et 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"); } else { echo("Integer is valid"); } ?>
Som i ovenstående kode skal indstillingerne placeres i en relateret array med navnet "options". Hvis der bruges flag, skal de ikke placeres i arrayet.
Da tallet er "300", er det ikke inden for den specificerede rækkevidde, outputtet fra ovenstående kode vil være "Integer is not valid".
For en fuld liste over funktioner og filtre, besøg CodeW3C.com tilbudte PHP Filter Reference ManualDu kan se alle tilgængelige indstillinger og flag for hver filter.
Verificer input
Lad os prøve at verificere input fra formularen.
Det første, vi skal gøre, er at bekræfte, om der findes de inputdata, vi leder efter.
Dernæst bruger vi filter_input() funktionen til at filtrere inputdataene.
I det nedenstående eksempel sendes inputvariablen "email" til en PHP-side:
<?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"; } } ?>
Eksempel Forklaring:
I det ovennævnte eksempel findes der en inputvariabel (email) der sendes via "GET"-metoden:
- Kontroller om der findes en "GET"-type "email" inputvariabel
- Hvis der findes en inputvariabel, kontroller om den er en gyldig e-mailadresse
Rense input
Lad os prøve at rense URL'en, der er sendt fra formularen.
Først skal vi bekræfte, om der findes de inputdata, vi leder efter.
Dernæst bruger vi filter_input() funktionen til at rense inputdataene.
I det nedenstående eksempel sendes inputvariablen "url" til en PHP-side:
<?php if(!filter_has_var(INPUT_POST, "url")) { echo("Input type does not exist"); } else { $url = filter_input(INPUT_POST, "url", FILTER_SANITIZE_URL); } ?>
Eksempel Forklaring:
I det ovennævnte eksempel findes der en inputvariabel (url) der sendes via "POST"-metoden:
- Kontroller om der findes en "POST"-type "url" inputvariabel
- Hvis der findes denne inputvariabel, skal den renses (fjern ulovlige tegn) og gemmes i $url variablen
Hvis inputvariablen ligner dette: "http://www.W3非o法ol.com.c字符n/" skal den rensede $url variabel være som denne:
http://www.codew3c.com/
Filtrering af flere input
En formular består ofte af flere inputfelter. For at undgå gentagelse af kald til filter_var eller filter_input, kan vi bruge filter_var_array eller filter_input_array funktionen.
I dette eksempel bruger vi filter_input_array() funktionen til at filtrere tre GET-variabler. Modtagne GET-variabler er et navn, en alder og en e-mailadresse:
<?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("Alder skal være et tal mellem 1 og 120.<br />"); } elseif (!$result["email"]) { echo("E-Mail er ikke gyldig.<br />"); } else { echo("Brugerinput er gyldigt"); } ?>
Eksempel Forklaring:
I dette eksempel er der tre inputvariabler sendt via "GET"-metoden (navn, alder og email)
- Sæt en array, der indeholder navnene på inputvariablerne samt filtreringsmetoderne for de specifikke inputvariabler
- Kald filter_input_array() funktionen med parametre, herunder GET-inputvariabler og den tidligere satte array
- Kontroller om "age" og "email" variablerne i $result variablen har ulovlige input. (Hvis der er ulovlige input,)
Den anden parameter for filter_input_array() funktionen kan være en array eller en enkelt filtrerings-ID.
Hvis parameteren er en enkelt filtrerings-ID, vil denne specificerede filtrerings-ID filtrere alle værdier i input-arrayet.
Hvis parameteren er en array, skal denne array følge nedenstående regler:
- Det skal være en nøgleværdi-array, hvor de indgange, der er variablerne i arrayet, er nøglerne (f.eks. "age"-inputvariablen)
- Værdierne i denne array skal være filter-ID'er eller arrays, der definerer filter, flag og indstillinger
Brug af Filter Callback
Ved at bruge FILTER_CALLBACK-filter kan du kalde en brugerdefineret funktion og bruge den som en filter. På denne måde får vi fuld kontrol over datafiltering.
Du kan oprette dine egne brugerdefinerede funktioner eller bruge eksisterende PHP-funktioner.
Angiv metoden til at definere filterfunktionerne, på samme måde som du angiver indstillingerne.
I det følgende eksempel bruger vi en brugerdefineret funktion til at konvertere alle "_" til mellemrum:
<?php function convertSpace($string) { return str_replace("_", " ", $string); } $string = "Peter_is_a_great_guy!"; echo filter_var($string, FILTER_CALLBACK, array("options"=>"convertSpace")); ?>
Resultatet af ovenstående kode er som følger:
Peter er en fantastisk fyr!
Eksempel Forklaring:
I det ovennævnte eksempel konverteres alle "_" til mellemrum:
- Opret en funktion, der erstatter "_" med et mellemrum
- Kald filter_var() funktionen, dens parameter er FILTER_CALLBACK filter samt en array, der indeholder vores funktioner
- Forrige side PHP Exception
- Næste side MySQL Introduktion