Sanitize and Validate Data met PHP Filters

Gegevensvalidatie is een integraal onderdeel van het werken met formulieren. Niet alleen kunnen ongeldige ingediende gegevens leiden tot beveiligingsproblemen, maar het kan ook uw webpagina breken. Vandaag gaan we bekijken hoe u illegale tekens kunt verwijderen en gegevens kunt valideren met behulp van de functie "filter_var".


Een voorbeeld is hieronder te zien. Een gebruiker heeft de tekst "I not not one" als startpagina ingevoerd. Als deze gegevens in een database zouden worden ingevoerd en later als een koppeling zouden worden opgehaald, zou de koppeling verbroken zijn.

De meeste mensen denken dat gegevensvalidatie een enorm saai proces is waarbij iemand ook:

  • Vergelijkt de gegevens die ze willen valideren tegen elke mogelijke combinatie die ze kunnen bedenken.
  • Probeert een gouden reguliere expressie te vinden die bij elke mogelijke combinatie past.
  • Een combinatie van de twee.

Er zijn duidelijke problemen met de hierboven genoemde:

  • Het is absoluut tijdrovend.
  • Er is een grote kans op fouten.

Gelukkig, beginnend met versie 5.2, heeft PHP een geweldige functie met de naam filter_var dat neemt de pijn weg van gegevensvalidatie.

filter_var in actie

filter_var zal doen, zowel, zuiveren en valideren van gegevens. Wat is het verschil tussen de twee?

  • Met ontsmetten worden alle illegale tekens uit de gegevens verwijderd.
  • Valideren zal bepalen of de gegevens in de juiste vorm zijn.

Notitie: waarom ontsmetten en niet alleen valideren? Het is mogelijk dat de gebruiker per ongeluk een verkeerd teken heeft getypt of dat deze van een slechte kopie en plak is. Door de gegevens te ontsmetten, neemt u de verantwoordelijkheid om op de fout van de gebruiker te jagen.

Hoe te gebruiken filter_var

Gebruik makend van filter_var is ongelooflijk eenvoudig. Het is gewoon een PHP-functie die twee stukjes gegevens vergt:

  • De variabele die u wilt controleren
  • Het type cheque dat moet worden gebruikt

Met de onderstaande code worden bijvoorbeeld alle HTML-tags uit een tekenreeks verwijderd:

$ string = "

Hallo Wereld!

"; $ new_string = filter_var ($ string, FILTER_SANITIZE_STRING); // $ new_string is nu" Hallo wereld! "

Hier is nog een voorbeeld - deze keer moeilijker. De onderstaande code zorgt ervoor dat de waarde van de variabele een geldig IP-adres is:

$ ip = "127.0.0.1"; $ valid_ip = filter_var ($ ip, FILTER_VALIDATE_IP); // $ valid_ip is TRUE $ ip = "127.0.1.1.1.1"; $ valid_ip = filter_var ($ ip, FILTER_VALIDATE_IP); // $ valid_ip is FALSE

Dat is hoe eenvoudig het is om te gebruiken filter_var. Zie het einde van deze zelfstudie voor een volledige lijst met alle regels die u kunt controleren.

Sanitizing Example

Hieronder ziet u een snel voorbeeld van het ontsmetten van invoer uit twee velden: een e-mailveld en een veld voor de beginpagina. In dit voorbeeld worden tekens verwijderd die niet in beide typen gegevens mogen voorkomen.


"; if (isset ($ _ POST ['homepage'])) echo filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL); echo"

";?>
E-mailadres:


Startpagina:


Door de FILTER_SANITIZE_EMAIL en FILTER_SANITIZE_URL constanten gedefinieerd door PHP, het giswerk om te weten welke tekens illegaal zijn is verdwenen.

Voorbeeld valideren

Alleen omdat de gegevens worden opgeschoond, is niet gegarandeerd dat deze correct zijn opgemaakt. In het onderstaande voorbeeld hoefden de gegevens niet te worden opgeschoond, maar het is duidelijk dat de gebruikersinvoer geen e-mail of URL is.

Om ervoor te zorgen dat de gegevens correct zijn geformatteerd, moet deze worden gevalideerd.


"; else echo" $ email is NIET een geldig e-mailadres.

"; if (isset ($ _ POST ['homepage'])) $ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL); if (filter_var ($ homepage, FILTER_VALIDATE_URL)) echo" $ startpagina is een geldige URL.

"; else echo" $ startpagina is NIET een geldige URL.

";?>
E-mailadres:


Startpagina:


Nu de gegevens zijn gevalideerd, kunt u er zeker van zijn dat de ingediende informatie precies is wat u zoekt.

Alles samenvoegen: een e-mailformulier verzenden

Nu de gegevenssanering en -validatie zijn behandeld, zullen we die vaardigheden gebruiken met een snel e-mailinzendingsformulier. Dit zal in geen geval van productiekwaliteit zijn - bijvoorbeeld, geen formulier zou een homepage moeten hebben - maar het zal perfect werken voor deze tutorial. Het formulier zal 4 stukjes informatie bevatten:

  • Naam
  • E-mailadres
  • Startpagina
  • Bericht

We zullen opschonen en valideren voor alle 4 de gegevens en alleen de e-mail verzenden als ze allemaal geldig zijn. Als iets ongeldig is of als velden leeg zijn, wordt het formulier aan de gebruiker gepresenteerd, samen met een lijst met items om te herstellen. We zullen ook de ontsmette gegevens aan de gebruiker retourneren in het geval dat hij niet weet dat bepaalde tekens illegaal zijn.

Stap 1 - Het formulier maken

Maak voor de eerste stap eenvoudig een formulierelement met 5 velden: de hierboven vermelde en een verzendknop:

Naam:


E-mailadres:


Startpagina:


Bericht:

Stap 2 - Bepaal of het formulier is verzonden

U kunt controleren of een formulier is verzonden door te kijken of de knop Verzenden is "ingesteld". Plaats de volgende code boven uw formulier:

if (isset ($ _ POST ['Submit'])) 

Stap 3 - Validatie van de naam en het berichtveld

Omdat zowel de naam- als de berichtvelden hetzelfde zullen worden gezuiverd en gevalideerd, zullen we ze samen doen. Controleer eerst of een veld leeg is door het volgende te doen:

if ($ _POST ['name'] == "") if ($ _POST ['message'] == "")

Maak ze vervolgens schoon met de FILTER_SANITIZE_STRING constante

$ _POST ['name'] = filter_var ($ _ POST ['name'], FILTER_SANITIZE_STRING); $ _POST ['message'] = filter_var ($ _ POST ['message'], FILTER_SANITIZE_STRING);

Controleer ten slotte of de twee velden nog steeds niet leeg zijn. Dit is om ervoor te zorgen dat na het verwijderen van alle illegale tekens, er geen leeg veld overblijft:

if ($ _POST ['name'] == "") if ($ _POST ['message'] == "")

We zullen geen enkele validatie uitvoeren op deze twee velden, simpelweg omdat er geen absolute manier is om te valideren tegen een Naam of willekeurige boodschap.

De definitieve code ziet er zo uit:

if ($ _POST ['name']! = "") $ _POST ['name'] = filter_var ($ _ POST ['name'], FILTER_SANITIZE_STRING); if ($ _POST ['name'] == "") $ errors. = 'Vul een geldige naam in.

'; else $ errors. = 'Vul uw naam in.
'; if ($ _POST ['message']! = "") $ _POST ['message'] = filter_var ($ _ POST ['message'], FILTER_SANITIZE_STRING); if ($ _POST ['message'] == "") $ errors. = 'Voer een bericht in om te verzenden.
'; else $ errors. = 'Voer een bericht in om te verzenden.
';

Stap 4 - Valideer het e-mailveld

Het e-mailveld wordt opgeschoond en gevalideerd op dezelfde manier als eerder in de zelfstudie.

Controleer eerst of het niet leeg is:

if ($ _POST ['email']! = "")

Maak het vervolgens schoon:

$ email = filter_var ($ _ POST ['email'], FILTER_SANITIZE_EMAIL);

Bevestig ten slotte het als een echt e-mailadres:

if (! filter_var ($ email, FILTER_VALIDATE_EMAIL))

De definitieve code ziet er zo uit:

if ($ _POST ['email']! = "") $ email = filter_var ($ _ POST ['email'], FILTER_SANITIZE_EMAIL); if (! filter_var ($ email, FILTER_VALIDATE_EMAIL)) $ errors. = "$ email is NIET een geldig e-mailadres.

"; else $ errors. = 'Voer uw e-mailadres in.
';

Stap 5 - Valideer het veld Home Page

Nogmaals, het veld voor de startpagina wordt op dezelfde manier opgeschoond en gevalideerd als eerder in de zelfstudie.

Controleer eerst of het niet leeg is:

if ($ _POST ['homepage']! = "")

Maak het vervolgens schoon en verwijder eventuele illegale tekens:

$ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL)

Bevestig het ten slotte om te controleren of het een echte URL is:

if (! filter_var ($ homepage, FILTER_VALIDATE_URL))

De definitieve code ziet er zo uit:

if ($ _POST ['homepage']! = "") $ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL); if (! filter_var ($ homepage, FILTER_VALIDATE_URL)) $ errors. = "$ startpagina is NIET een geldige URL.

"; else $ errors. = 'Voer je startpagina in.
';

Stap 6 - Controleer op fouten en stuur het bericht

Nu we alle velden hebben doorlopen, is het tijd om de fouten te melden of het bericht te verzenden. Begin met aan te nemen dat er geen fouten waren:

if (! $ errors) 

Bouw vervolgens het e-mailbericht:

$ mail_to = '[email protected]'; $ subject = 'Nieuwe e-mail van formulierinzending'; $ message = 'Van:'. $ _POST ['naam']. "\ N"; $ message. = 'Email:'. $ _POST ['email']. "\ N"; $ message. = 'Homepage:'. $ _POST ['startpagina']. "\ N"; $ message. = "Bericht: \ n". $ _POST ['bericht']. "\ N \ n";

En als laatste stuur je het bericht:

mail ($ to, $ subject, $ message);

Als er echter fouten zijn opgetreden, meld deze dan en laat de gebruiker het opnieuw proberen:

echo '
'. $ fouten. '
';

Het voltooide project ziet er als volgt uit:


'; else $ errors. = 'Vul uw naam in.
'; if ($ _POST ['email']! = "") $ email = filter_var ($ _ POST ['email'], FILTER_SANITIZE_EMAIL); if (! filter_var ($ email, FILTER_VALIDATE_EMAIL)) $ errors. = "$ email is NIET een geldig e-mailadres.

"; else $ errors. = 'Voer uw e-mailadres in.
'; if ($ _POST ['homepage']! = "") $ homepage = filter_var ($ _ POST ['homepage'], FILTER_SANITIZE_URL); if (! filter_var ($ homepage, FILTER_VALIDATE_URL)) $ errors. = "$ startpagina is NIET een geldige URL.

"; else $ errors. = 'Voer je startpagina in.
'; if ($ _POST ['message']! = "") $ _POST ['message'] = filter_var ($ _ POST ['message'], FILTER_SANITIZE_STRING); if ($ _POST ['message'] == "") $ errors. = 'Voer een bericht in om te verzenden.
'; else $ errors. = 'Voer een bericht in om te verzenden.
'; if (! $ errors) $ mail_to = '[email protected]'; $ subject = 'Nieuwe e-mail van formulierinzending'; $ message = 'Van:'. $ _POST ['naam']. "\ N"; $ message. = 'Email:'. $ _POST ['email']. "\ N"; $ message. = 'Homepage:'. $ _POST ['startpagina']. "\ N"; $ message. = "Bericht: \ n". $ _POST ['bericht']. "\ N \ n"; mail ($ to, $ subject, $ message); echo "Bedankt voor uw e-mail!

"; else echo '
'. $ fouten. '
'; ?>
Naam:


E-mailadres:


Startpagina:


Bericht:

Samenvatting

Ik hoop dat het lezen van deze tutorial je een goede introductie heeft gegeven in de nieuwe filterfuncties van PHP. Er zijn nog veel meer functies en regels die niet werden behandeld, dus als je meer wilt weten, kijk dan in het gedeelte Gegevens filteren in de PHP-handleiding..

  • Abonneer u op de NETTUTS RSS-feed voor meer dagelijkse webontwikkelingen, tuts en artikelen.