PHP Validation de formulaire
Dans ce chapitre, nous allons présenter comment utiliser PHP pour valider un formulaire soumis par le client.
Validation de formulaire PHP
![]() |
Lors du traitement de PHP, nous devons prendre en compte la sécurité.
Dans ce chapitre, nous allons démontrer la gestion sécurisée des données de formulaires PHP. Pour empêcher les pirates et le spam, nous devons effectuer une validation de sécurité sur le formulaire. |
|---|
Le formulaire HTML présenté dans ce chapitre contient les champs de saisie suivants : des champs de texte obligatoires et facultatifs, des boutons radio et un bouton d'envoi :
Les règles de validation pour le formulaire ci-dessus sont les suivantes :
| Champ | Règles de validation |
|---|---|
| Name | Obligatoire. + Ne peut contenir que des lettres et des espaces |
| Obligatoire. + Doit être une adresse e-mail valide (contenant '@' et '.') | |
| URL | Facultatif. Si présent, doit contenir une URL valide |
| Remarques | Facultatif. Champ de saisie multiligne (textarea) |
| Genre | Obligatoire. Vous devez en sélectionner un |
Tout d'abord, examinons le code HTML pur du formulaire :
Champs de texte
Les champs « Nom », « E-mail » et « URL » sont des éléments de saisie de texte, et le champ « Remarques » est un textarea. Le code HTML est le suivant :
“名字”: <input type="text" name="name"> E-mail: <input type="text" name="email"> 网址: <input type="text" name="website"> 备注: <textarea name="comment" rows="5" cols="40"></textarea>
Boutons radio
Le champ « Genre » est constitué de boutons radio. Le code HTML est le suivant :
性别: <input type="radio" name="gender" value="female">女 <input type="radio" name="gender" value="male">男
Éléments de formulaire
Le code HTML du formulaire est le suivant :
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
Ce formulaire utilisemethod="post"comme méthode pour soumettre les données.
![]() |
Qu'est-ce que la variable $_SERVER["PHP_SELF"] ? $_SERVER["PHP_SELF"] est une variable superglobale qui renvoie le nom de fichier du script en cours d'exécution, relatif à la racine du document. |
|---|
Ainsi, $_SERVER["PHP_SELF"] envoie les données du formulaire vers la page actuelle au lieu de sauter vers une autre page.
![]() |
Qu'est-ce que la méthode htmlspecialchars() ? La fonction htmlspecialchars() convertit certains caractères prédéfinis en entités HTML. Les caractères prédéfinis sont :
|
|---|
À quoi faut-il faire attention dans les formulaires PHP ?
La variable $_SERVER["PHP_SELF"] peut potentiellement être utilisée par des pirates informatiques !
Lorsque des pirates informatiques utilisent des liens HTTP de cross-site scripting pour attaquer, la variable serveur $_SERVER["PHP_SELF"] peut également être injectée avec des scripts. La raison est que le script cross-site est ajouté au chemin du fichier en cours d'exécution, donc la chaîne $_SERVER["PHP_SELF"] contiendra du code JavaScript suivant le lien HTTP.
![]() |
XSS est aussi appelé CSS (Cross-Site Script), une attaque de cross-site scripting. Des attaquants malveillants insèrent du code HTML malveillant dans des pages web. Lorsque les utilisateurs naviguent sur la page, le code HTML intégré dans la page web sera exécuté, atteignant ainsi l'objectif particulier de l'utilisateur malveillant. |
|---|
Définissez le nom du fichier de formulaire suivant sur "test_form.php" :
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
Maintenant, nous utilisons l'URL pour spécifier l'adresse de soumission "test_form.php". Le code ci-dessus est modifié comme suit :
<form method="post" action="test_form.php">
Ce serait très bien.
Cependant, considérez que les utilisateurs peuvent saisir l'adresse suivante dans la barre d'adresse du navigateur :
http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E
Dans l'URL ci-dessus, il sera analysé comme le code suivant et exécuté :
<form method="post" action="test_form.php/"><script>alert('hacked')</script>
Le code ajoute une balise script et une commande alert. Lorsque la page se charge, ce code JavaScript sera exécuté (l'utilisateur verra une fenêtre pop-up). Ce n'est qu'un simple exemple pour illustrer que la variable PHP_SELF peut être exploitée par des pirates informatiques.
Veuillez noter,Tout code JavaScript peut être ajouté dans la balise <script> !Les pirates informatiques peuvent l'utiliser pour rediriger la page vers une page sur un autre serveur. Le fichier de code de la page peut contenir du code malveillant, et le code peut modifier des variables globales ou obtenir les données de formulaire de l'utilisateur.
Comment éviter l'exploitation de $_SERVER["PHP_SELF"] ?
La variable $_SERVER["PHP_SELF"] peut être protégée contre l'exploitation à l'aide de la fonction htmlspecialchars().
Le code du formulaire est le suivant :
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
htmlspecialchars() convertit certains caractères prédéfinis en entités HTML. Maintenant, si les utilisateurs veulent exploiter la variable PHP_SELF, le résultat sera affiché comme suit :
<form method="post" action="test_form.php/"><script>alert('hacked')</script>">
La tentative d'exploitation de la vulnérabilité échoue !
Utilisation de PHP pour valider les données de formulaire
Premièrement, nous traitons toutes les données soumises par l'utilisateur via la fonction htmlspecialchars() de PHP.
Lorsque nous utilisons la fonction htmlspecialchars(), si l'utilisateur tente de soumettre le champ de texte suivant :
<script>location.href('http://www.example.com')</script>
Le code ne sera pas exécuté car il sera enregistré en tant que code échappé HTML, comme suit :
<script>location.href('http://www.example.com')</script>
Le code ci-dessus est sûr et peut être affiché normalement sur la page ou inséré dans des e-mails.
Lorsque l'utilisateur soumet le formulaire, nous allons faire les deux choses suivantes :
- Utilisez la fonction trim() de PHP pour supprimer les caractères inutiles des données saisies par l'utilisateur (tels que les espaces, les tabulations, les retours à la ligne).
- Utilisez la fonction stripslashes() de PHP pour supprimer les barres obliques inverses (\) des données saisies par l'utilisateur.
Ensuite, écrivons ces fonctions de filtrage dans une fonction qui nous est propre, ce qui peut grandement améliorer la réutilisabilité du code.
Nommez la fonction test_input().
Maintenant, nous pouvons utiliser la fonction test_input() pour vérifier toutes les variables dans $_POST. Le code du script est le suivant :
Exemple
Exécuter l'exemple »
Notez que lors de l'exécution du script ci-dessus, nous utilisons $_SERVER["REQUEST_METHOD"] pour détecter si le formulaire a été soumis. Si REQUEST_METHOD est POST, le formulaire sera soumis - et les données seront validées. Si le formulaire n'est pas soumis, la validation sera ignorée et des champs vides seront affichés.
Dans l'exemple ci-dessus, tous les champs de saisie sont facultatifs. Même si les utilisateurs ne saisissent aucune donnée, cela s'affichera normalement.
Dans les chapitres suivants, nous présenterons comment valider les données saisies par les utilisateurs.
Autres extensions