PHP -zelfstudie

PHP HOME PHP-intro PHP-installatie PHP-syntaxis PHP-opmerkingen PHP-variabelen PHP-echo / afdrukken PHP-gegevenstypen PHP-strings PHP-nummers PHP-wiskunde PHP-constanten PHP-operators PHP Als...Anders...Anders PHP-switch PHP-loops PHP-functies PHP-arrays PHP Superglobals PHP RegEx

PHP- formulieren

PHP-formulierverwerking PHP-formuliervalidatie PHP-formulier vereist URL/e-mail van PHP-formulier PHP-formulier voltooid

PHP Geavanceerd

PHP-datum en tijd PHP opnemen PHP-bestandsverwerking PHP-bestand openen/lezen PHP-bestand maken/schrijven PHP-bestand uploaden PHP-cookies PHP-sessies PHP-filters PHP-filters geavanceerd PHP-callback-functies PHP JSON PHP-uitzonderingen

PHP OOP

PHP Wat is OOP PHP-klassen/objecten PHP-constructor PHP-vernietiger PHP-toegangsmodificaties PHP-overerving PHP-constanten PHP abstracte lessen PHP-interfaces PHP-kenmerken PHP statische methoden Statische eigenschappen van PHP PHP-naamruimten PHP-iterables

MySQL- database

MySQL-database MySQL Connect MySQL DB maken MySQL-tabel maken MySQL Gegevens invoegen MySQL Laatste ID ophalen MySQL Meerdere invoegen MySQL voorbereid MySQL Gegevens selecteren MySQL Waar MySQL Bestel op MySQL Gegevens verwijderen MySQL-updategegevens MySQL-limietgegevens

PHP XML

PHP XML-parsers PHP SimpleXML-parser PHP SimpleXML - Get PHP XML Expat PHP XML DOM

PHP - AJAX

Ajax-intro AJAX PHP AJAX-database AJAX XML Live zoeken in Ajax Ajax-peiling

PHP- voorbeelden

PHP-voorbeelden PHP-compiler PHP-quiz PHP-oefeningen PHP-certificaat

PHP- referentie

PHP-overzicht PHP-array PHP-agenda PHP-datum PHP-map PHP-fout PHP-uitzondering PHP-bestandssysteem PHP-filter PHP FTP PHP JSON PHP-sleutelwoorden PHP Libxml PHP-e-mail PHP-wiskunde PHP Diversen PHP MySQLi PHP-netwerk PHP-uitvoercontrole PHP RegEx PHP SimpleXML PHP-stream PHP-string Beheer van PHP-variabelen PHP XML-parser PHP-zip PHP-tijdzones

PHP- formuliervalidatie


Dit en de volgende hoofdstukken laten zien hoe u PHP kunt gebruiken om formuliergegevens te valideren.


PHP-formuliervalidatie

Denk aan VEILIGHEID bij het verwerken van PHP-formulieren!

Deze pagina's laten zien hoe u PHP-formulieren verwerkt met het oog op veiligheid. Een goede validatie van formuliergegevens is belangrijk om uw formulier te beschermen tegen hackers en spammers!

Het HTML-formulier waar we in deze hoofdstukken aan gaan werken, bevat verschillende invoervelden: verplichte en optionele tekstvelden, keuzerondjes en een verzendknop:

De validatieregels voor het bovenstaande formulier zijn als volgt:

Field Validation Rules
Name Required. + Must only contain letters and whitespace
E-mail Required. + Must contain a valid email address (with @ and .)
Website Optional. If present, it must contain a valid URL
Comment Optional. Multi-line input field (textarea)
Gender Required. Must select one

Eerst zullen we kijken naar de eenvoudige HTML-code voor het formulier:



Tekstvelden

De naam-, e-mail- en websitevelden zijn tekstinvoerelementen en het commentaarveld is een tekstgebied. De HTML-code ziet er als volgt uit:

Name: <input type="text" name="name">
E-mail: <input type="text" name="email">
Website: <input type="text" name="website">
Comment: <textarea name="comment" rows="5" cols="40"></textarea>

Radio knoppen

De geslachtsvelden zijn keuzerondjes en de HTML-code ziet er als volgt uit:

Gender:
<input type="radio" name="gender" value="female">Female
<input type="radio" name="gender" value="male">Male
<input type="radio" name="gender" value="other">Other

Het formulierelement

De HTML-code van het formulier ziet er als volgt uit:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

Wanneer het formulier is verzonden, worden de formuliergegevens verzonden met method="post".

Wat is de $_SERVER["PHP_SELF"] variabele?

De $_SERVER["PHP_SELF"] is een super globale variabele die de bestandsnaam van het momenteel uitgevoerde script retourneert.

Dus de $_SERVER["PHP_SELF"] stuurt de ingediende formuliergegevens naar de pagina zelf, in plaats van naar een andere pagina te springen. Op deze manier krijgt de gebruiker foutmeldingen op dezelfde pagina als het formulier.

Wat is de functie htmlspecialchars()?

De functie htmlspecialchars() converteert speciale tekens naar HTML-entiteiten. Dit betekent dat het HTML-tekens zoals < en > zal vervangen door < en >. Dit voorkomt dat aanvallers de code misbruiken door HTML- of Javascript-code (Cross-site Scripting-aanvallen) in formulieren te injecteren.


Grote opmerking over PHP-formulierbeveiliging

De variabele $_SERVER["PHP_SELF"] kan door hackers worden gebruikt!

Als PHP_SELF op uw pagina wordt gebruikt, kan een gebruiker een schuine streep (/) invoeren en vervolgens enkele Cross Site Scripting (XSS)-opdrachten uitvoeren.

Cross-site scripting (XSS) is een type kwetsbaarheid in de computerbeveiliging die doorgaans wordt aangetroffen in webtoepassingen. XSS stelt aanvallers in staat scripts aan de clientzijde te injecteren in webpagina's die door andere gebruikers worden bekeken.

Stel dat we het volgende formulier hebben op een pagina met de naam "test_form.php":

<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">

Als een gebruiker nu de normale URL in de adresbalk invoert, zoals "http://www.example.com/test_form.php", wordt de bovenstaande code vertaald naar:

<form method="post" action="test_form.php">

Tot nu toe, zo goed.

Houd er echter rekening mee dat een gebruiker de volgende URL in de adresbalk invoert:

http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E

In dit geval wordt de bovenstaande code vertaald naar:

<form method="post" action="test_form.php/"><script>alert('hacked')</script>

Deze code voegt een scripttag en een waarschuwingsopdracht toe. En wanneer de pagina wordt geladen, wordt de JavaScript-code uitgevoerd (de gebruiker ziet een waarschuwingsvenster). Dit is slechts een eenvoudig en onschuldig voorbeeld van hoe de variabele PHP_SELF kan worden misbruikt.

Houd er rekening mee dat elke JavaScript-code kan worden toegevoegd in de <script>-tag! Een hacker kan de gebruiker omleiden naar een bestand op een andere server, en dat bestand kan kwaadaardige code bevatten die de globale variabelen kan wijzigen of het formulier naar een ander adres kan verzenden om bijvoorbeeld de gebruikersgegevens op te slaan.


Hoe $_SERVER["PHP_SELF"] exploits te vermijden?

$_SERVER["PHP_SELF"] exploits kunnen worden vermeden door de functie htmlspecialchars() te gebruiken.

De formuliercode zou er als volgt uit moeten zien:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

De functie htmlspecialchars() converteert speciale tekens naar HTML-entiteiten. Als de gebruiker nu probeert de PHP_SELF-variabele te misbruiken, resulteert dit in de volgende uitvoer:

<form method="post" action="test_form.php/&quot;&gt;&lt;script&gt;alert('hacked')&lt;/script&gt;">

De exploitpoging mislukt en er wordt geen schade aangericht!


Formuliergegevens valideren met PHP

Het eerste dat we zullen doen, is alle variabelen doorgeven via de functie htmlspecialchars() van PHP.

Als we de functie htmlspecialchars() gebruiken; als een gebruiker het volgende in een tekstveld probeert in te voeren:

<script>locatie.href('http://www.hacked.com')</script>

- dit zou niet worden uitgevoerd, omdat het als HTML-escape-code zou worden opgeslagen, zoals dit:

<script>location.href('http://www.hacked.com')</script>

De code kan nu veilig op een pagina of in een e-mail worden weergegeven.

We zullen ook nog twee dingen doen wanneer de gebruiker het formulier indient:

  1. Verwijder onnodige tekens (extra spatie, tab, nieuwe regel) uit de invoergegevens van de gebruiker (met de PHP-functie trim())
  2. Verwijder backslashes (\) uit de gebruikersinvoergegevens (met de PHP stripslashes() functie)

De volgende stap is om een ​​functie te maken die alle controles voor ons doet (wat veel handiger is dan dezelfde code steeds opnieuw te schrijven).

We zullen de functie test_input() noemen.

Nu kunnen we elke $_POST-variabele controleren met de functie test_input(), en het script ziet er als volgt uit:

Voorbeeld

<?php
// define variables and set to empty values
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  $name = test_input($_POST["name"]);
  $email = test_input($_POST["email"]);
  $website = test_input($_POST["website"]);
  $comment = test_input($_POST["comment"]);
  $gender = test_input($_POST["gender"]);
}

function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}
?>

Merk op dat we aan het begin van het script controleren of het formulier is ingediend met $_SERVER["REQUEST_METHOD"]. Als de REQUEST_METHOD POST is, is het formulier verzonden en moet het worden gevalideerd. Als het niet is ingediend, slaat u de validatie over en geeft u een leeg formulier weer.

In het bovenstaande voorbeeld zijn echter alle invoervelden optioneel. Het script werkt prima, zelfs als de gebruiker geen gegevens invoert.

De volgende stap is om invoervelden verplicht te maken en zo nodig foutmeldingen te maken.