Validation des formulaires PHP

Cette section et la section suivante expliquent comment utiliser PHP pour valider les données du formulaire.

Validation des formulaires PHP

Astuce :Accordez de l'importance à la sécurité lors du traitement des formulaires PHP !

Ces pages montreront comment traiter en toute sécurité les formulaires PHP. Une validation appropriée des données du formulaire HTML est importante pour prévenir les pirates et les pourriels !

Les formulaires HTML que nous utiliserons par la suite contiennent plusieurs types de champs d'entrée : des champs de texte obligatoires et facultatifs, des boutons radio et un bouton de soumission :

Le formulaire ci-dessus utilise les règles de validation suivantes :

Champ Règles de validation
Nom Obligatoire. Il doit contenir des lettres et des espaces.
E-mail Obligatoire. Il doit contenir une adresse e-mail valide (comprend @ et .).
Site web Facultatif. Si rempli, il doit contenir une URL valide.
Commentaire Facultatif. Champ d'entrée en plusieurs lignes (zone de texte).
Gender Obligatoire. Vous devez choisir une option.

D'abord, regardons le code HTML pur de ce formulaire :

Champ de texte

Les champs name, email et website appartiennent aux éléments d'entrée de texte, le champ comment est une zone de texte. Le code HTML est le suivant :

Nom : <input type="text" name="name">
E-mail : <input type="text" name="email">
Site web : <input type="text" name="website">
Commentaire : <textarea name="comment" rows="5" cols="40"></textarea>

Bouton radio

Le champ gender est un bouton radio, le code HTML est le suivant :

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

Éléments du formulaire

Le code HTML du formulaire est le suivant :

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

Lors de la soumission de ce formulaire, les données du formulaire sont envoyées via method="post".

Qu'est-ce que la variable $_SERVER["PHP_SELF"] ?

$_SERVER["PHP_SELF"] est une variable universelle, elle renvoie le nom du fichier du script en cours d'exécution.

Par conséquent, $_SERVER["PHP_SELF"] envoie les données du formulaire à la page elle-même, au lieu de rediriger vers une autre page. De cette manière, l'utilisateur peut obtenir des informations d'erreur sur la page du formulaire.

Qu'est-ce que la fonction htmlspecialchars() ?

La fonction htmlspecialchars() convertit les caractères spéciaux en entités HTML. Cela signifie que les caractères HTML tels que < et > sont remplacés par < et >. Cela permet de prévenir les attaques par injection de code HTML ou JavaScript (attaques par scripting intersite) par les pirates.

Avis important sur la sécurité des formulaires PHP

La variable $_SERVER["PHP_SELF"] peut être utilisée par les pirates !

Si votre page utilise PHP_SELF, l'utilisateur peut entrer une barre oblique inversée et exécuter un scripting intersite (XSS).

Astuce :Le scripting intersite (Cross-site scripting, XSS) est un type de vulnérabilité de sécurité informatique courante dans les applications Web. XSS permet à l'attaquant d'insérer des scripts clients dans les pages web que d'autres utilisateurs visitent.

Supposons qu'une page appelée "test_form.php" contienne le formulaire suivant :

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

Maintenant, si l'utilisateur accède à l'URL normale dans la barre d'adresse : "http://www.example.com/test_form.php", le code ci-dessus est converti en :

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

Jusqu'à présent, tout va bien.

Cependant, si l'utilisateur saisit l'URL suivante dans la barre d'adresse :

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

Dans ce cas, le code ci-dessus est converti en :

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

Ce code ajoute un script et une commande d'alerte. Et lorsque cette page est chargée, le code JavaScript est exécuté (l'utilisateur voit une boîte de dialogue). C'est juste un exemple simple et inoffensif de la manière dont la variable PHP_SELF est utilisée.

Vous devez être conscient Le tag <script> permet d'ajouter n'importe quel code JavaScript! Les pirates informatiques peuvent rediriger l'utilisateur vers un fichier sur un autre serveur, dans lequel le code malveillant peut modifier les variables globales ou soumettre le formulaire à une autre adresse pour enregistrer les données de l'utilisateur, etc.

Comment éviter que $_SERVER["PHP_SELF"] soit utilisé de manière malveillante ?

En utilisant la fonction htmlspecialchars() , nous pouvons éviter que $_SERVER["PHP_SELF"] soit utilisé de manière malveillante.

Le code du formulaire est le suivant :

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

La fonction htmlspecialchars() convertit les caractères spéciaux en entités HTML. Maintenant, si l'utilisateur essaie d'utiliser la variable PHP_SELF , cela produira le résultat suivant :

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

Inutilisable, sans danger !

Validation des données du formulaire via PHP

La première chose que nous devons faire est de passer toutes les variables à la fonction htmlspecialchars() PHP .

Après avoir utilisé la fonction htmlspecialchars() , si l'utilisateur essaie de soumettre le contenu suivant dans un champ de texte :

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

- Le code ne s'exécutera pas car il sera sauvegardé comme code d'échappement, comme ceci :

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

Maintenant, cette ligne de code est sécurisée lorsqu'elle est affichée sur la page ou dans un e-mail.

Lorsque l'utilisateur soumet ce formulaire, nous devons faire deux choses :

  1. (En utilisant la fonction PHP trim() ) Supprimer les caractères inutiles des données d'entrée de l'utilisateur (espaces, tabulations, retours chariots supplémentaires)
  2. (En utilisant la fonction PHP stripslashes() ) Supprimer les barres obliques inverses (\) des données d'entrée de l'utilisateur

Ensuite, nous créons une fonction de vérification (c'est plus efficace que d'écrire le code à chaque fois).

Nous nommons la fonction test_input() .

Maintenant, nous pouvons vérifier chaque variable $_POST à l'aide de la fonction test_input() . Le script est le suivant :

Exemple

<?php
// Définir les variables et les configurer avec des valeurs vides
$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;
}
?>

Exemple de exécution

Veuillez noter que nous vérifions au début du script si le formulaire a été soumis avec $_SERVER["REQUEST_METHOD"]. Si REQUEST_METHOD est POST, le formulaire a été soumis - et doit être vérifié. Si non soumis, passez la vérification et affichez un formulaire vide.

Cependant, dans l'exemple ci-dessus, tous les champs d'entrée sont optionnels. Même si l'utilisateur n'a pas entré de données, le script fonctionne normalement.

La prochaine étape consiste à créer les champs d'entrée obligatoires et à créer les messages d'erreur nécessaires.