PHP-formuliervalidatie
- Vorige pagina PHP formulierverwerking
- Volgende pagina PHP verplichte velden van het formulier
Deze sectie en de volgende sectie leggen uit hoe je PHP gebruikt om formuliergegevens te valideren.
PHP-formuliervalidatie
Tip:Bied bij het verwerken van PHP-formulieren aandacht aan de beveiliging!
Deze pagina's tonen hoe je PHP-formulieren veilig kunt verwerken. Het juist valideren van HTML-formuliergegevens is belangrijk om hackers en spam te voorkomen!
De HTML-formulieren die we later gebruiken bevatten verschillende invoervelden: verplichte en optionele tekstvelden, keuzeradio's en een indieningsknop:
Het formulier gebruikt de volgende valideringsregels:
Velden | Valideringsregels |
---|---|
Naam | Verplicht. Alphabete en spaties moeten worden ingevoerd. |
Verplicht. Een geldig e-mailadres moet worden ingevoerd (inclusief @ en .). | |
Website | Optioneel. Als ingevuld, moet het een geldige URL bevatten. |
Commentaar | Optioneel. Een meerdere regels invoerveld (tekstvak). |
Gender | Verplicht. Een keuze moet worden gemaakt. |
Laten we eerst de puur HTML-code van dit formulier bekijken:
Tekstvelden
Naam, e-mail en website zijn tekstvelden, het commentaar-veld is een tekstvak.
Naam: <input type="text" name="name"> E-mail: <input type="text" name="email"> Website: <input type="text" name="website"> Commentaar: <textarea name="comment" rows="5" cols="40"></textarea>
Keuzeradio
Het gender-veld is een keuzeradio, 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
Formulierelementen
De HTML-code van het formulier ziet er als volgt uit:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>
Bij het indienen van dit formulier worden de formuliergegevens verzonden via method="post".
Wat is de variabele $_SERVER["PHP_SELF"]?
$_SERVER["PHP_SELF"] is een hyperglobale variabele die de naam van het huidige uitvoerbare script retourneert.
Daarom stuurt $_SERVER["PHP_SELF"] de formuliergegevens naar de pagina zelf, in plaats van door te sturen naar een andere pagina. Op deze manier kunnen gebruikers foutmeldingen ontvangen op de formulierpagina.
Wat is de functie htmlspecialchars()?
De functie htmlspecialchars() vervangt speciale tekens door HTML-entiteiten. Dit betekent dat HTML-tekens zoals < en > worden vervangen door < en > . Dit voorkomt dat aanvallers de code misbruiken door HTML of JavaScript-code (cross-site scripting-aanval) in het formulier in te voeren.
Belangrijke waarschuwing over de beveiliging van PHP-formulieren
De variabele $_SERVER["PHP_SELF"] kan door hackers worden misbruikt!
Als uw pagina PHP_SELF gebruikt, kunnen gebruikers een onderstreep invoeren en cross-site scripting (XSS) uitvoeren.
Tip:Cross-site scripting (XSS) is een type computervulnerabiliteit, vaak voorkomend in webtoepassingen. XSS maakt het mogelijk voor een aanvaller om clientscripts in de webpagina's in te voeren die andere gebruikers bekijken.
Stel dat we een pagina hebben genaamd "test_form.php" met het volgende formulier:
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
Nu, als de gebruiker de normale URL in de adresbalk invoert: "http://www.example.com/test_form.php", wordt de bovenstaande code omgezet in:
<form method="post" action="test_form.php">
Tot nu toe is alles in orde.
Maar als de gebruiker de volgende URL invoert in de adresbalk:
http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
In dit geval wordt de bovenstaande code omgezet in:
<form method="post" action="test_form.php"/><script>alert('hacked')</script>
Dit script voegt een script en een hint commando toe. En wanneer deze pagina wordt geladen, wordt de JavaScript-code uitgevoerd (de gebruiker ziet een hintvak). Dit is slechts een eenvoudig en onschuldig voorbeeld van hoe de PHP_SELF-variabele kan worden gebruikt.
U moet zich ervan bewust zijn De <script>-tag kan elke JavaScript-code toevoegen!Hackers kunnen gebruikers naar een bestand op een andere server redirecten, waar kwaadaardige code kan worden uitgevoerd om globale variabelen te wijzigen of het formulier naar een andere adres te sturen om gebruikersgegevens op te slaan, enz.
Hoe voorkomen we dat $_SERVER["PHP_SELF"] wordt misbruikt?
Door gebruik te maken van de functie htmlspecialchars() kunnen we voorkomen dat $_SERVER["PHP_SELF"] wordt misbruikt.
Het formuliercode ziet er als volgt uit:
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
De functie htmlspecialchars() zet speciale karakters om in HTML-entiteiten. Als de gebruiker probeert gebruik te maken van de variabele PHP_SELF, leidt dit tot de volgende uitvoer:
<form method="post" action="test_form.php/"><script>alert('hacked')</script>">
Gebruikloos, geen gevaar!
PHP formuliergegevens valideren
Wat we als eerste moeten doen, is alle variabelen doorgeven met de functie htmlspecialchars() van PHP.
Na het gebruik van de functie htmlspecialchars(), als de gebruiker probeert het volgende in te dienen in een tekstveld:
<script>location.href('http://www.hacked.com')</script>
- De code wordt niet uitgevoerd omdat deze als geëscaped code wordt opgeslagen, zoals hieronder:
<script>location.href('http://www.hacked.com')</script>
Nu is dit stukje code veilig om weer te geven op de pagina of in een e-mail.
Wanneer de gebruiker het formulier indient, moeten we nog twee dingen doen:
- (Door gebruik te maken van de PHP-functie trim()) Verwijder onnodige karakters uit de gebruikersinvoer (extra spaties, tabtasten, regeleindes).
- (Door gebruik te maken van de PHP-functie stripslashes()) Verwijder de backslashes (\) uit de gebruikersinvoer.
Daarna maken we een controlefunctie aan (dit is efficiënter dan het herhaaldelijk schrijven van code).
We noemen de functie test_input().
Nu kunnen we elke $_POST-variabele controleren met de functie test_input(). Hier is de script:
Voorbeeld
<?php // Definieer variabelen en stel deze in op lege waarden $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; } ?>
Let op, aan het begin van het script hebben we gecontroleerd of het formulier is ingediend met $_SERVER["REQUEST_METHOD"]. Als REQUEST_METHOD POST is, is het formulier ingediend - en moet het worden geverifieerd. Als het niet is ingediend, wordt de verificatie overgeslagen en wordt een leeg formulier weergegeven.
In het bovenstaande voorbeeld zijn alle invoervelden optioneel. Zelfs als de gebruiker geen gegevens invoert, werkt het script normaal.
De volgende stap is het maken van verplichte invoervelden en het maken van foutmeldingen die nodig zijn.
- Vorige pagina PHP formulierverwerking
- Volgende pagina PHP verplichte velden van het formulier