Validation du formulaire PHP

Nous devons prendre en compte la sécurité lorsque nous traitons des formulaires PHP.

Dans ce chapitre, nous montrerons le traitement de sécurité des données du formulaire PHP Afin d'éviter les pirates et le spam, nous devons effectuer une vérification de la sécurité des données sur le formulaire.


Le formulaire HTML introduit dans ce chapitre contient les champs de saisie suivants : Doit être associé à des champs de texte optionnels, des boutons radio , et bouton Soumettre :

Instance

<!DOCTYPE HTML>
 <html>
 <head>
     <meta charset="utf-8">
     <title>PHP.cn</title>
 </head>
 <body>
 <h2>PHP 表单验证实例</h2>
 <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 
    名字: <input type="text" name="name" value="">
     <br>
     E-mail: <input type="text" name="email" value="">
     <br>
     网址: <input type="text" name="website" value="">
     <br>
     备注: <textarea name="comment" rows="5" cols="40"></textarea>
     <br>
     性别:
     <input type="radio" name="gender"  value="female">女
     <input type="radio" name="gender"  value="male">男
     <br>
     <input type="submit" name="submit" value="提交">
 </form>
 </body>
 </html>

Résultat en cours d'exécution du programme :

5.png

Les règles de validation du formulaire ci-dessus sont les suivantes :

          字段        验证规则
    名字必须。 +只能包含字母和空格
    E-mail必须。 + 必须是一个有效的电子邮件地址(包含'@'和'.')
    网址可选。如果存在,它必须包含一个有效的URL
    备注可选。 多行输入字段(文本域)
Champ
    性别必须。 必须选择一个
<🎜 >
<🎜> Règles de validation<🎜><🎜>
NomObligatoire. +Ne peut contenir que des lettres et des espaces
E-mailObligatoire . + Doit être une adresse e-mail valide (contient '@' et '.')
URLFacultatif. S'il est présent, il doit contenir une URL valide
Remarques Facultatif . Champ de saisie multiligne (champ de texte)
<🎜>

Décomposons le code et examinons-le :


Champ de texte

Les champs "Nom", "E-mail" et "Site Web" sont des éléments de saisie de texte, et le champ "Remarques" est une zone de texte.

Le code HTML est le suivant :

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


Bouton radio

Le champ "Gender" est le bouton radio

Le code HTML est le suivant :

Gender :
<input type= " radio" name="gender" value="female">Femme
<input type="radio" name="gender" value="male">Homme


Éléments du formulaire

Le code du formulaire HTML est le suivant :

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

Le formulaire utilise la méthode method="post" 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.

Par conséquent, $_SERVER["PHP_SELF"] envoie les données du formulaire à la page elle-même au lieu de passer à une autre page. De cette manière, les utilisateurs peuvent obtenir des informations sur les messages 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 > Cela empêche les attaquants d'exploiter le code en injectant du code HTML ou JavaScript dans le formulaire (attaques de cross-site scripting).

Conseils importants sur la sécurité des formulaires PHP

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

Si votre page utilise PHP_SELF, les utilisateurs peuvent saisir un trait de soulignement et exécuter des scripts intersites (XSS), également appelés CSS. avec XSS permet à un attaquant de saisir un script côté client dans des pages Web consultées par d'autres utilisateurs.

Supposons que nous ayons une page nommée "test_form.php" avec la forme suivante :

< ;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">

C'est très bien.

Considérez cependant que l'utilisateur saisira l'adresse suivante dans la barre d'adresse du navigateur :

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


L'URL ci-dessus sera analysée dans le code suivant et exécutée :

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


Une balise de script a été ajoutée au code et une commande d'alerte a été ajoutée. Ce code Javascript sera exécuté au chargement de la page (l'utilisateur verra une boîte pop-up). Ceci n'est qu'un exemple simple de la façon dont la variable PHP_SELF peut être exploitée par des pirates.

Veuillez noter que n'importe quel code JavaScript peut être ajouté dans la balise <script> Les pirates peuvent l'utiliser pour rediriger la page vers la page d'un autre serveur. Le fichier de code de la page peut protéger le code malveillant et le code peut modifier les variables globales ou obtenir les données du formulaire de l'utilisateur.


Comment éviter que $_SERVER["PHP_SELF"] soit exploité ?

$ _SERVER ["PHP_SELF"] peut être évité en utilisant 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. Désormais, si l'utilisateur souhaite utiliser la variable PHP_SELF, le résultat sera affiché comme suit :

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

Échec de l'essai de cette vulnérabilité !


Valider les données du formulaire via PHP

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

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

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

- Le code ne sera pas exécuté car il sera enregistré en tant que code échappé, comme ceci :

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

Maintenant, ce code est affiché sur la page Il est sécurisé en ligne ou par e-mail.

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

1. (Grâce à la fonction PHP trim()) Supprimer les caractères inutiles (espaces supplémentaires) dans les données saisies par l'utilisateur. , tabulation, nouvelle ligne)

2. (via la fonction PHP stripslashes()) Supprimez les barres obliques inverses dans les données d'entrée utilisateur ()

Ensuite, nous créons une fonction de vérification (par rapport à l'écriture de code encore et encore le rend plus efficace).

Nous avons nommé la fonction test_input().

Maintenant, nous pouvons vérifier chaque variable $_POST via la fonction test_input(), le script est comme ceci :

Exemple

<!DOCTYPE HTML>
 <html>
 <head>
     <meta charset="utf-8">
     <title>PHP中文网(php.cn)</title>
 </head>
 <body>
 
 <?php
 // 定义变量并默认设置为空值
 $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;
 }
 ?>
 
 <h2>PHP 表单验证实例</h2>
 <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
     名字: <input type="text" name="name">
     <br><br>
     E-mail: <input type="text" name="email">
     <br><br>
     网址: <input type="text" name="website">
     <br><br>
     备注: <textarea name="comment" rows="5" cols="40"></textarea>
     <br><br>
     性别:
     <input type="radio" name="gender" value="female">女
     <input type="radio" name="gender" value="male">男
     <br><br>
     <input type="submit" name="submit" value="提交">
 </form>
 
 <?php
 echo "<h2>您输入的内容是:</h2>";
 echo $name;
 echo "<br>";
 echo $email;
 echo "<br>";
 echo $website;
 echo "<br>";
 echo $comment;
 echo "<br>";
 echo $gender;
 ?>
 
 </body>

Exécutez le programme et jetez un œil


Remarque : Lorsque nous exécuterons le script ci-dessus, nous utiliserons $_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 affichée vide.

L'utilisation d'éléments de saisie dans les exemples ci-dessus est facultative et peut être affichée normalement même si l'utilisateur ne saisit aucune donnée.


Dans les prochains chapitres, nous présenterons comment valider les données saisies par l'utilisateur.



Formation continue
||
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>PHP.cn</title> </head> <body> <h2>PHP 表单验证实例</h2> <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 名字: <input type="text" name="name" value=""> <br> E-mail: <input type="text" name="email" value=""> <br> 网址: <input type="text" name="website" value=""> <br> 备注: <textarea name="comment" rows="5" cols="40"></textarea> <br> 性别: <input type="radio" name="gender" value="female">女 <input type="radio" name="gender" value="male">男 <br> <input type="submit" name="submit" value="提交"> </form> </body> </html>
soumettreRéinitialiser le code
  • Recommandations de cours
  • Téléchargement du didacticiel