Derniers tutoriels de développement web
 

PHP 5 La validation des formulaires


Ceci et les chapitres suivants montrent comment utiliser PHP pour valider les données de formulaire.


Formulaire PHP validation

Pensez SÉCURITÉ lors du traitement de formulaires PHP!

Ces pages montrent comment traiter les formes PHP avec la sécurité à l'esprit. Une validation appropriée des données de formulaire est important de protéger votre forme contre les pirates et les spammeurs!

Le formulaire HTML, nous travaillerons à ces chapitres, contient différents champs de saisie: champs de texte requis et en option, les boutons radio, et un bouton d'envoi:

Les règles de validation pour la forme ci-dessus sont les suivantes:

Champ Règles de validation
prénom Champs obligatoires. + Ne doit contenir que des lettres et des espaces
Email Champs obligatoires. + Doit contenir une adresse email valide (with @ and .)
Site Internet Optionnel. Le cas échéant, il doit contenir une URL valide
Commentaire Optionnel. Champ de saisie à plusieurs lignes (textarea)
Le genre Champs obligatoires. Vous devez sélectionner un

Tout d'abord, nous allons examiner le code HTML brut pour la forme:


Les champs de texte

Le nom, le courriel et les champs de site sont des éléments d'entrée de texte, et le champ de commentaire est une zone de texte. Le code HTML ressemble à ceci:

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>

Boutons radio

Les champs de genre sont des boutons radio et le code HTML ressemble à ceci:

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

L'élément de forme

Le code HTML de la forme ressemble à ceci:

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

Lorsque le formulaire est soumis, les données de formulaire est envoyé avec method = « post ».

Quelle est la variable $ _SERVER [ "PHP_SELF"]?

$ _SERVER [ « PHP_SELF »] est une variable super globale qui retourne le nom du fichier du script en cours d'exécution.

Ainsi, le $ _SERVER [ « PHP_SELF »] envoie les données du formulaire soumis à la page elle-même, au lieu de sauter sur une autre page. De cette façon, l'utilisateur reçoit des messages d'erreur sur la même page que la forme.

Quelle est la htmlspecialchars() fonction?

Le htmlspecialchars() fonction convertit les caractères spéciaux pour les entités HTML. Cela signifie qu'il va remplacer les caractères HTML comme <et> avec & lt; & gt ;. et Cela empêche les pirates d'exploiter le code en injectant du code HTML ou Javascript (Cross-site Scripting attacks) dans les formes.


Big Note sur le formulaire PHP Security

$ _SERVER [ "PHP_SELF"] variable peut être utilisé par des pirates!

Si PHP_SELF est utilisé dans votre page , puis un utilisateur peut entrer une barre oblique (/) et puis certains Cross Site Scripting (XSS) les commandes à exécuter.

Cross-site scripting (XSS) est un type de vulnérabilité de sécurité informatique en général dans les applications Web. XSS permet aux pirates d'injecter un script côté client dans des pages Web consultées par d' autres utilisateurs.

Supposons que nous avons sous la forme suivante dans une page nommée "test_form.php" :

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

Maintenant, si un utilisateur entre l'URL normale dans la barre d'adresse comme "http://www.example.com/test_form.php" , le code ci - dessus sera traduit à:

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

Jusqu'ici tout va bien.

Cependant, considérer que 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, sera traduit le code ci-dessus:

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

Ce code ajoute une balise de script et une commande d'alerte. Et quand la page se charge, le code JavaScript seront exécutés (the user will see an alert box) d' (the user will see an alert box) . Ceci est juste un exemple simple et sans danger comment la variable PHP_SELF peut être exploitée.

Soyez conscient de tout code JavaScript peut être ajouté dans le <script> balise! Un pirate peut rediriger l'utilisateur vers un fichier sur un autre serveur, et ce fichier peut contenir du code malveillant qui peut modifier les variables globales ou soumettre le formulaire à une autre adresse pour enregistrer les données de l'utilisateur, par exemple.


Comment faire pour éviter _SERVER $ [ "PHP_SELF"] Exploits?

$ _SERVER [ "PHP_SELF"] exploits peut être évité en utilisant les htmlspecialchars() fonction.

Le code de forme devrait ressembler à ceci:

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

Le htmlspecialchars() fonction convertit les caractères spéciaux pour les entités HTML. Maintenant, si l'utilisateur tente d'exploiter la variable PHP_SELF, elle se traduira par la sortie suivante:

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

L'exploit tentative échoue, et aucun mal est fait!


Valider les données de formulaire avec PHP

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

Lorsque nous utilisons les htmlspecialchars() fonction; alors si un utilisateur tente de soumettre ce qui suit dans un champ de texte:

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

- ce ne serait pas exécuté, car il serait enregistré en tant que code HTML échappé, comme ceci:

& Lt; & gt scénario; emplacement. href('http://www.hacked.com') & lt; / script & gt;

Le code est maintenant en sécurité à afficher sur une page ou dans un e-mail.

Nous allons également faire deux choses lorsque l'utilisateur soumet le formulaire:

  1. Bande de caractères inutiles (extra space, tab, newline) de (with the PHP trim() (extra space, tab, newline) à partir des données d'entrée d'utilisateur (with the PHP trim() fonction)
  2. Retirer les barres obliques inverses (\) à partir des données d'entrée d'utilisateur (with the PHP stripslashes() fonction)

L'étape suivante consiste à créer une fonction qui fera toutes les vérifications pour nous (which is much more convenient than writing the same code over and over again) ce (which is much more convenient than writing the same code over and over again) d' (which is much more convenient than writing the same code over and over again) .

Nous appellerons la fonction test_input() .

Maintenant, nous pouvons vérifier chaque variable $ _POST avec le test_input() fonction, et le script ressemble à ceci:

Exemple

<?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;
}
?>
»Exécuter exemple

Notez que, au début du script, nous vérifions si le formulaire a été soumis en utilisant $ _SERVER [ « REQUEST_METHOD »]. Si le REQUEST_METHOD est POST, le formulaire a été soumis - et il devrait être validé. Si elle n'a pas été soumise, passez la validation et afficher un formulaire vierge.

Cependant, dans l'exemple ci-dessus, tous les champs d'entrée sont facultatifs. Le script fonctionne très bien, même si l'utilisateur ne saisit pas de données.

L'étape suivante consiste à rendre les champs d'entrée nécessaires et créer des messages d'erreur en cas de besoin.