PHP Filters (Filter)

PHP-filters worden gebruikt om gegevens van onveilige bronnen te valideren en te filteren, zoals gebruikersinput.

Wat is een PHP-filter?

PHP-filters worden gebruikt om gegevens van onveilige bronnen te valideren en te filteren.

Het valideren en filteren van gebruikersinput of aangepaste gegevens is een belangrijk onderdeel van elke webtoepassing.

Het doel van de PHP filterextensie is om datafiltering gemakkelijker en sneller te maken.

Waarom filters gebruiken?

Bijna alle webtoepassingen zijn afhankelijk van externe input. Deze gegevens komen meestal van gebruikers of andere toepassingen (bijvoorbeeld webdiensten). Door het gebruik van filters, kunt u ervoor zorgen dat de toepassing de juiste inputtype ontvangt.

Je zou altijd externe data moeten filteren!

Input filtering is een van de belangrijkste toepassingssicherheidskwesties.

Wat is externe data?

  • Invoerdata van formulieren
  • Cookies
  • Server variabelen
  • Database query resultaten

Functies en filters

Gebruik een van de volgende filterfuncties om variabelen te filteren:

  • filter_var() - Filter een enkele variabele met een opgegeven filter
  • filter_var_array() - Filter meerdere variabelen met dezelfde of verschillende filters
  • filter_input - Haal een invoervariabele op en filter deze
  • filter_input_array - Haal meerdere invoervariabelen op en filter ze met dezelfde of verschillende filters

In de volgende voorbeeld gebruiken we de functie filter_var() om een integer te valideren:

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

Het bovenstaande code gebruikt de filter "FILTER_VALIDATE_INT" om de variabele te filteren. Omdat dit een geldig getal is, is de uitvoer van de code: "Integer is valid".

Als we proberen een variabele met een niet-integraal getal te gebruiken, is de uitvoer: "Integer is not valid".

Voor een volledige lijst van functies en filters, bezoek onze PHP Filter Referentiemanual.

Validating en Sanitizing

Er zijn twee filters:

Validating filters:

  • Gebruikt om gebruikersinput te valideren
  • Strikte formatenregels (bijvoorbeeld URL of E-mail verificatie)
  • Retourneert de verwachte type als het succesvol is, anders FALSE

Sanitizing filter:

  • Gebruikt om specifieke karakters in een string toe te laten of te verbieden
  • Geen dataformaatregels
  • Altijd een string retourneren

Opties en flags

Opties en flags worden gebruikt om extra filteropties toe te voegen aan de opgegeven filter.

Verschillende filters hebben verschillende opties en flags.

In de volgende voorbeeld gebruiken we filter_var() en de opties "min_range" en "max_range" om een integer te valideren:

<?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");
 }
?>

Net zoals de bovenstaande code, moeten de opties in een gerelateerde array genaamd "options" worden ingevoegd. Als er geen flags worden gebruikt, hoeft dit niet in de array te worden opgenomen.

Omdat het getal "300" is, valt het niet binnen het gespecificeerde bereik, de uitvoer van de bovenstaande code zal "Integer is not valid" zijn.

Voor een volledige lijst van functies en filters, bezoek aub CodeW3C.com. PHP Filter ReferentiemanualU kunt de beschikbare opties en flags van elke filter zien.

Verifieer invoer

Laten we proberen de invoer van het formulier te verifiëren.

Het eerste dat we moeten doen, is bevestigen of de invoergegevens die we zoeken bestaan.

Vervolgens gebruiken we de functie filter_input() om de invoergegevens te filteren.

In het volgende voorbeeld wordt de invoervariabele "email" naar de PHP-pagina gestuurd:

<?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";
  }
 }
?>

Uitleg van het voorbeeld:

In het bovenstaande voorbeeld is er een invoervariabele (email) die wordt overgebracht via de "GET"-methode:

  1. Controleer of er een "GET"-type "email" invoervariabele bestaat.
  2. Als er een invoervariabele bestaat, controleer of deze een geldig e-mailadres is.

Zuiver invoer

Laten we proberen de URL te zuiveren die van het formulier wordt overgebracht.

Allereerst moeten we bevestigen of de invoergegevens die we zoeken bestaan.

Vervolgens gebruiken we de functie filter_input() om de invoergegevens te zuiveren.

In het volgende voorbeeld wordt de invoervariabele "url" naar de PHP-pagina gestuurd:

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

Uitleg van het voorbeeld:

In het bovenstaande voorbeeld is er een invoervariabele (url) die wordt overgebracht via de "POST"-methode:

  1. Controleer of er een "POST"-type "url" invoervariabele bestaat.
  2. Als er een dergelijke invoervariabele bestaat, zuiver deze dan (verwijder ongeldige karakters) en sla deze op in de $url variabele.

Als de invoervariabele er zo uitziet: "http://www.W3非o法ol.com.c字符n/", dan zou de gezuiverde $url variabele er zo uit moeten zien:

http://www.codew3c.com/

Filter meerdere invoer

Formulieren bestaan meestal uit meerdere invoerfields. Om herhaaldelijk aanroepen van filter_var of filter_input te voorkomen, kunnen we filter_var_array of de functie filter_input_array gebruiken.

In dit voorbeeld gebruiken we de functie filter_input_array() om drie GET-variabelen te filteren. De ontvangen GET-variabelen zijn een naam, een leeftijd en een e-mailadres:

<?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("Age must be a number between 1 and 120.<br />");
 }
elseif (!$result["email"])
 {
 echo("E-Mail is not valid.<br />");
 }
else
 {
 echo("User input is valid");
 }
?>

Uitleg van het voorbeeld:

In het voorbeeld zijn er drie invoervariabelen overgebracht via de "GET"-methode (name, age en email)

  1. Stel een array in die de namen van de invoervariabelen bevat, evenals de filters voor de gespecificeerde invoervariabelen
  2. Roep de functie filter_input_array aan, met parameters zoals GET-invoervariabelen en de net ingestelde array
  3. Controleer of de variabelen "age" en "email" in de variabele $result ongeldige invoer bevatten. (Als er ongeldige invoer is,)

De tweede parameter van de functie filter_input_array() kan een array of een enkelvoudig filter-ID zijn.

Als het parameter een enkelvoudig filter-ID is, zal dit gespecificeerde filter alle waarden in de invoerarray filteren.

Als het parameter een array is, moet deze array voldoen aan de volgende regels:

  • Moet een关联数组 zijn, waarin de invoervariabelen de sleutels van de array zijn (bijvoorbeeld "age" invoervariabele)
  • De waarden van deze array moeten het ID van de filter zijn of een array zijn die de filter, het teken en de opties definieert

Gebruik Filter Callback

Met de FILTER_CALLBACK-filter kun je een aangepaste functie aanroepen en deze als een filter gebruiken. Op deze manier hebben we volledige controle over de datafiltering.

Je kunt je eigen aangepaste functie maken of bestaande PHP-functies gebruiken.

Stel het gebruik van de filterfunctie in op dezelfde manier als het instellen van de opties.

In onderstaand voorbeeld gebruiken we een aangepaste functie om alle "_" te vervangen door spaties:

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

Het resultaat van de bovenstaande code is als volgt:

Peter is een geweldige man!

Uitleg van het voorbeeld:

De bovenstaande voorbeeld vervangt alle "_" door spaties:

  1. Maak een functie die "_" vervangt door een spatie
  2. Roep de functie filter_var() aan, zijn parameter is de FILTER_CALLBACK-filter en een array die onze functie bevat