Jean-Marie Renouard 
LightPath 2014©
Le logo PHP est du domaine public 
http://commons.wikimedia.org/wiki/File:PHP-logo.svg 
Ce document est licencié sous l...
Elément de sécurité au transfert 
Validation côté client 
Validation côté serveur 
Format des données 
Restriction de...
2 types de formulaire 
Structure d’un formulaire 
Contenu d’un formulaire 
Elément d’un formulaire 
Cas de l’upload d...
LightPath 2014© - http://www.jmrenouard.fr 
5
Formulaire type GET 
◦ Récupération d’information 
◦ Les éléments constituent les paramètres. 
◦<FORM METHOD=« GET » … 
...
LightPath 2014© - http://www.jmrenouard.fr 
7
METHOD: Méthode de transfert 
ACTION: URL d’envoi 
ENCTYPE: Type d’encodage 
ELEMENTS: Ensemble d’élément du formulair...
<FORM method=« post » action=« post.php"> 
Login: <INPUT type=« text » name=« login" /> 
<br/> 
Password: <INPUT type=« pa...
LightPath 2014© - http://www.jmrenouard.fr 
10
Les entrées 
Les sélecteurs 
Les zones de texte 
LightPath 2014© - http://www.jmrenouard.fr 
11
Une ligne de saisie 
Déclaration du type d’entrée 
◦Attribut type 
◦<input type=« xxx » 
Définition d’un nom à chaque e...
Assignation d’une valeur par défaut 
◦Attribut value 
◦<input value=« moi » …/> 
Assignation d’une taille 
◦Attribut siz...
Text: Saisie non masquée de texte 
Password: Saisie masquée de texte 
Hidden: Champ caché à l’affichage 
File: Champ d...
Radio: case type radio/choix exclusif 
Checkbox: case type case à cocher 
LightPath 2014© - http://www.jmrenouard.fr 
15
submit: Bouton d’envoi de formulaire 
reset: Bouton de remise à zéro 
image: Bouton d’envoi de formulaire 
◦Attribut sr...
Menu type drop down 
<SELECT><option>…</option>…</SELECT> 
Définition d’un nom du sélecteur 
◦<Select name=« menu » …</...
Une option d’un sélecteur 
◦<option>…</option> 
Affectation d’un valeur à une option 
◦Attribut value 
◦<option value=« ...
Zone de texte libre non masquée 
◦<TEXTAREA></TEXTAREA> 
Définition d’un nom du sélecteur 
◦Attribut name 
◦<TEXTAREA na...
LightPath 2014© - http://www.jmrenouard.fr 
20
Entrée type file 
◦<input type=« file » name=«fichier »/> 
La balise form avec un attribut enctype 
◦<form enctype=« mul...
Envoi de plusieurs valeurs 
Utilisation des crochets dans l’attribut name 
◦<input name =« fichier[] » …> 
◦<input name ...
LightPath 2014© - http://www.jmrenouard.fr 
23
Tout est dans le tableau $_GET 
Les attributs name des éléments servent directement comme clé du tableau. 
foreach ($_G...
Tout est dans le tableau $_POST 
Les attributs name des éléments servent directement comme clé du tableau. 
foreach ($_...
LightPath 2014© - http://www.jmrenouard.fr 
26
Tout est dans le tableau $_FILE 
Chaque entrée du tableau correspond à un fichier 
La clé est le nom de l’entrée 
Chaq...
LightPath 2014© - http://www.jmrenouard.fr 
28
Passage en HTTPS 
Le site est souvent en HTTPs intégral. 
<form ACTION=« https://serveur.com/post.php » …></form> 
Ligh...
LightPath 2014© - http://www.jmrenouard.fr 
30
Réalisation par script JS 
Peu fiable ( attaque ) 
Inutile si Javascript désactivé 
Facilitation de contournement. 
Li...
<form onsubmit="return valide_form ( );" …> 
A l’envoi, la fonction valide_form est invoqué: 
◦Si true est renvoyé par l...
<form name=« formulaire» method="post" action=« post.php" onsubmit="return valide_form ( );"> 
<h1>Entrer Votre Nom</h1>...
<script type="text/javascript"> 
<!– 
function valide_form ( ) { 
valid = true; 
if ( document.formulaire.nom.value == "" ...
LightPath 2014© - http://www.jmrenouard.fr 
35
Fiable car contrôlé par l’application 
L’utilisateur ne peut altérer le comportement. 
Il peut le détourner seulement. ...
LightPath 2014© - http://www.jmrenouard.fr 
37
Vérification de la taille des chaînes 
◦if (count($_POST[‘nom’] > 255) { …} 
Vérification du type 
◦is_array, is_bool, i...
Vérification format email: 
◦if (!eregi("^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9- ]+(.[a-z0-9-]+)*(.[a-z]{2,3})$", $email)){ ...
La fonction filter_var permet la validation de certains formats: 
◦FILTER_VALIDATE_BOOLEAN 
◦FILTER_VALIDATE_EMAIL 
◦FILT...
LightPath 2014© - http://www.jmrenouard.fr 
41
$allow=array(‘nom ’, ‘comments’); 
foreach ($_POST as $key => $val) { 
if (! in_array($allow, $key) { 
unset($_POST[$key])...
LightPath 2014© - http://www.jmrenouard.fr 
43
Utilisation d’un catcha 
Image avec formulaire de saisie 
Blocage de tous les robots sans OCR. 
Élimination de 99% des...
Génération d’une chaîne aléatoire 
Stockage de la clé MD5 de la chaîne en SESSION ($_SESSION) 
Création de l’image de l...
Récupération de la valeur du catcha 
Calcul de la clé MD5 de la valeur 
Comparaison avec la valeur en session. 
Si pas...
LightPath 2014© - http://www.jmrenouard.fr 
47
Retrait de tous les caractères sensibles 
Encodage des caractères sensibles 
But est d’éviter les attaques: 
◦Empêcher ...
Retrait de balises HTML: strip_tags 
Encodage html: htmlentities 
Encode url: urlencode 
LightPath 2014© - http://www.j...
La fonction filter_var permet l’épuration 
◦FILTER_SANITIZE_EMAIL 
◦FILTER_SANITIZE_ENCODED 
◦FILTER_SANITIZE_MAGIC_QUOTE...
Documentation du PHP 
http://www.php.net/docs 
LightPath 2014© - http://www.jmrenouard.fr 
51
LightPath: 
◦Société de conseil et d’ingénierie 
◦Formations, Conseil, Audit et mise en oeuvre 
◦jmrenouard@lightpath.fr ...
Prochain SlideShare
Chargement dans…5
×

Gestion de formulaires en PHP

995 vues

Publié le

Présentation de la gestion des formulaires en PHP5

Publié dans : Ingénierie
0 commentaire
0 j’aime
Statistiques
Remarques
  • Soyez le premier à commenter

  • Soyez le premier à aimer ceci

Aucun téléchargement
Vues
Nombre de vues
995
Sur SlideShare
0
Issues des intégrations
0
Intégrations
153
Actions
Partages
0
Téléchargements
48
Commentaires
0
J’aime
0
Intégrations 0
Aucune incorporation

Aucune remarque pour cette diapositive

Gestion de formulaires en PHP

  1. 1. Jean-Marie Renouard LightPath 2014©
  2. 2. Le logo PHP est du domaine public http://commons.wikimedia.org/wiki/File:PHP-logo.svg Ce document est licencié sous licence ◦Attribution-NonCommercial-ShareAlike ◦CC BY-NC-SA Plus de détails: http://creativecommons.org/licenses/by-nc-sa/3.0/fr/ LightPath 2014© - http://www.jmrenouard.fr 2
  3. 3. Elément de sécurité au transfert Validation côté client Validation côté serveur Format des données Restriction des données Formulaires anti-robots Protection des données côté serveur LightPath 2014© - http://www.jmrenouard.fr 3
  4. 4. 2 types de formulaire Structure d’un formulaire Contenu d’un formulaire Elément d’un formulaire Cas de l’upload de fichiers Récupération des données d’un formulaire Récupération des fichiers uploadés LightPath 2014© - http://www.jmrenouard.fr 4
  5. 5. LightPath 2014© - http://www.jmrenouard.fr 5
  6. 6. Formulaire type GET ◦ Récupération d’information ◦ Les éléments constituent les paramètres. ◦<FORM METHOD=« GET » … Formulaire type POST ◦ Envoi d’information ◦ Les éléments constituent les données à traiter. ◦<FORM METHOD=« POST » … LightPath 2014© - http://www.jmrenouard.fr 6
  7. 7. LightPath 2014© - http://www.jmrenouard.fr 7
  8. 8. METHOD: Méthode de transfert ACTION: URL d’envoi ENCTYPE: Type d’encodage ELEMENTS: Ensemble d’élément du formulaire ◦ Zone d’échange d’information ◦Ne sont transmis qu’à la validation du formulaire LightPath 2014© - http://www.jmrenouard.fr 8
  9. 9. <FORM method=« post » action=« post.php"> Login: <INPUT type=« text » name=« login" /> <br/> Password: <INPUT type=« password » name=« password" /> <br/> <INPUT type="submit" value="Envoyer"> </FORM> LightPath 2014© - http://www.jmrenouard.fr 9
  10. 10. LightPath 2014© - http://www.jmrenouard.fr 10
  11. 11. Les entrées Les sélecteurs Les zones de texte LightPath 2014© - http://www.jmrenouard.fr 11
  12. 12. Une ligne de saisie Déclaration du type d’entrée ◦Attribut type ◦<input type=« xxx » Définition d’un nom à chaque entrée ◦Attribut name ◦<input name=« nom » …/> LightPath 2014© - http://www.jmrenouard.fr 12
  13. 13. Assignation d’une valeur par défaut ◦Attribut value ◦<input value=« moi » …/> Assignation d’une taille ◦Attribut size ◦<input size=« 10 » …/> LightPath 2014© - http://www.jmrenouard.fr 13
  14. 14. Text: Saisie non masquée de texte Password: Saisie masquée de texte Hidden: Champ caché à l’affichage File: Champ de sélection de fichier LightPath 2014© - http://www.jmrenouard.fr 14
  15. 15. Radio: case type radio/choix exclusif Checkbox: case type case à cocher LightPath 2014© - http://www.jmrenouard.fr 15
  16. 16. submit: Bouton d’envoi de formulaire reset: Bouton de remise à zéro image: Bouton d’envoi de formulaire ◦Attribut src ◦<input type=« image » src=« envoi.png » … LightPath 2014© - http://www.jmrenouard.fr 16
  17. 17. Menu type drop down <SELECT><option>…</option>…</SELECT> Définition d’un nom du sélecteur ◦<Select name=« menu » …</select> Activation de la sélection multiple ◦<Select multiple=« 1 » …</select> LightPath 2014© - http://www.jmrenouard.fr 17
  18. 18. Une option d’un sélecteur ◦<option>…</option> Affectation d’un valeur à une option ◦Attribut value ◦<option value=« pierre »>Pierre</option> Sélection par défaut ◦Attribut selected ◦<option SELECTED >Pierre</option> LightPath 2014© - http://www.jmrenouard.fr 18
  19. 19. Zone de texte libre non masquée ◦<TEXTAREA></TEXTAREA> Définition d’un nom du sélecteur ◦Attribut name ◦<TEXTAREA name=« menu »></ TEXTAREA > Définition de la taille en colonne et ligne ◦Attributs cols et rows ◦<TEXTAREA cols=« 10 » rows=« 10 » ></ TEXTAREA > LightPath 2014© - http://www.jmrenouard.fr 19
  20. 20. LightPath 2014© - http://www.jmrenouard.fr 20
  21. 21. Entrée type file ◦<input type=« file » name=«fichier »/> La balise form avec un attribut enctype ◦<form enctype=« multipart/form- data »>…</form> Autorisation de transmission en plusieurs Requêtes HTTP (multipart ). LightPath 2014© - http://www.jmrenouard.fr 21
  22. 22. Envoi de plusieurs valeurs Utilisation des crochets dans l’attribut name ◦<input name =« fichier[] » …> ◦<input name =« fichier[] » …> Valable pour toutes les types d’entrée ◦Ex: option LightPath 2014© - http://www.jmrenouard.fr 22
  23. 23. LightPath 2014© - http://www.jmrenouard.fr 23
  24. 24. Tout est dans le tableau $_GET Les attributs name des éléments servent directement comme clé du tableau. foreach ($_GET as $k => $v) echo « $k = $v »; LightPath 2014© - http://www.jmrenouard.fr 24
  25. 25. Tout est dans le tableau $_POST Les attributs name des éléments servent directement comme clé du tableau. foreach ($_POST as $k => $v) echo « $k = $v »;  . LightPath 2014© - http://www.jmrenouard.fr 25
  26. 26. LightPath 2014© - http://www.jmrenouard.fr 26
  27. 27. Tout est dans le tableau $_FILE Chaque entrée du tableau correspond à un fichier La clé est le nom de l’entrée Chaque élément du tableau contient: ◦Le nom du fichier d’origine: $_FILES[‘fichier1’][‘name’] ◦Le type mime : $_FILES[‘fichier1’][‘type’] ◦La taille du fichier: $_FILES[‘fichier1’][‘size’] ◦Le nom du fichier temporaire local: $_FILES[‘fichier1’][‘tmp_name’] ◦Le code d’erreur du fichier : $_FILES[‘fichier1’][‘error’]  . LightPath 2014© - http://www.jmrenouard.fr 27
  28. 28. LightPath 2014© - http://www.jmrenouard.fr 28
  29. 29. Passage en HTTPS Le site est souvent en HTTPs intégral. <form ACTION=« https://serveur.com/post.php » …></form> LightPath 2014© - http://www.jmrenouard.fr 29
  30. 30. LightPath 2014© - http://www.jmrenouard.fr 30
  31. 31. Réalisation par script JS Peu fiable ( attaque ) Inutile si Javascript désactivé Facilitation de contournement. LightPath 2014© - http://www.jmrenouard.fr 31
  32. 32. <form onsubmit="return valide_form ( );" …> A l’envoi, la fonction valide_form est invoqué: ◦Si true est renvoyé par la méthode JS, le formulaire est envoyé. ◦Sinon, il faut effectuer une nouvelle soumission. LightPath 2014© - http://www.jmrenouard.fr 32
  33. 33. <form name=« formulaire» method="post" action=« post.php" onsubmit="return valide_form ( );"> <h1>Entrer Votre Nom</h1> <p>Votre Nom: <input type="text" name="nom"></p> <p><input type="submit" name="send" value=« Envoyer"></p> </form> LightPath 2014© - http://www.jmrenouard.fr 33
  34. 34. <script type="text/javascript"> <!– function valide_form ( ) { valid = true; if ( document.formulaire.nom.value == "" ) { alert ( « Remplisser le nom." ); valid = false; } return valid; } //--> </script> LightPath 2014© - http://www.jmrenouard.fr 34
  35. 35. LightPath 2014© - http://www.jmrenouard.fr 35
  36. 36. Fiable car contrôlé par l’application L’utilisateur ne peut altérer le comportement. Il peut le détourner seulement. Si les données ne sont pas correctes, ◦Pas de traitement des données ◦Renvoi d’un nouveau formulaire avec les erreurs LightPath 2014© - http://www.jmrenouard.fr 36
  37. 37. LightPath 2014© - http://www.jmrenouard.fr 37
  38. 38. Vérification de la taille des chaînes ◦if (count($_POST[‘nom’] > 255) { …} Vérification du type ◦is_array, is_bool, is_callable, is_double, is_float, is_int, is_integer, is_long, is_null, isset, is_numéric, is_object, is_real, is_resource, is_scalar, is_string LightPath 2014© - http://www.jmrenouard.fr 38
  39. 39. Vérification format email: ◦if (!eregi("^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9- ]+(.[a-z0-9-]+)*(.[a-z]{2,3})$", $email)){ …} Vérification d’une date ◦If (!preg_match( '`^d{1,2}/d{1,2}/d{4}$`' , $value ) ) {…} LightPath 2014© - http://www.jmrenouard.fr 39
  40. 40. La fonction filter_var permet la validation de certains formats: ◦FILTER_VALIDATE_BOOLEAN ◦FILTER_VALIDATE_EMAIL ◦FILTER_VALIDATE_FLOAT ◦FILTER_VALIDATE_INT ◦FILTER_VALIDATE_IP ◦FILTER_VALIDATE_REGEXP ◦FILTER_VALIDATE_URL LightPath 2014© - http://www.jmrenouard.fr 40
  41. 41. LightPath 2014© - http://www.jmrenouard.fr 41
  42. 42. $allow=array(‘nom ’, ‘comments’); foreach ($_POST as $key => $val) { if (! in_array($allow, $key) { unset($_POST[$key]); } } LightPath 2014© - http://www.jmrenouard.fr 42
  43. 43. LightPath 2014© - http://www.jmrenouard.fr 43
  44. 44. Utilisation d’un catcha Image avec formulaire de saisie Blocage de tous les robots sans OCR. Élimination de 99% des spams LightPath 2014© - http://www.jmrenouard.fr 44
  45. 45. Génération d’une chaîne aléatoire Stockage de la clé MD5 de la chaîne en SESSION ($_SESSION) Création de l’image de la chaîne Envoi du résultat. LightPath 2014© - http://www.jmrenouard.fr 45
  46. 46. Récupération de la valeur du catcha Calcul de la clé MD5 de la valeur Comparaison avec la valeur en session. Si pas identique, régénérer une image. Si identique, supprimer l’entrée en session LightPath 2014© - http://www.jmrenouard.fr 46
  47. 47. LightPath 2014© - http://www.jmrenouard.fr 47
  48. 48. Retrait de tous les caractères sensibles Encodage des caractères sensibles But est d’éviter les attaques: ◦Empêcher les attaques de XSS Risques: ◦Redirection ◦Vol d’information ◦Ralentissement ◦Exécution d’action non désirée en fond LightPath 2014© - http://www.jmrenouard.fr 48
  49. 49. Retrait de balises HTML: strip_tags Encodage html: htmlentities Encode url: urlencode LightPath 2014© - http://www.jmrenouard.fr 49
  50. 50. La fonction filter_var permet l’épuration ◦FILTER_SANITIZE_EMAIL ◦FILTER_SANITIZE_ENCODED ◦FILTER_SANITIZE_MAGIC_QUOTES ◦FILTER_SANITIZE_NUMBER_FLOAT ◦FILTER_SANITIZE_NUMBER_INT ◦FILTER_SANITIZE_SPECIAL_CHARS ◦FILTER_SANITIZE_STRING ◦FILTER_SANITIZE_STRIPPED ◦FILTER_SANITIZE_URL ◦FILTER_UNSAFE_RAW LightPath 2014© - http://www.jmrenouard.fr 50
  51. 51. Documentation du PHP http://www.php.net/docs LightPath 2014© - http://www.jmrenouard.fr 51
  52. 52. LightPath: ◦Société de conseil et d’ingénierie ◦Formations, Conseil, Audit et mise en oeuvre ◦jmrenouard@lightpath.fr Jean-Marie RENOUARD ◦jmrenouard@gmail.com ◦Twitter: @jmrenouard ◦http://www.jmrenouard.fr LightPath 2014© - http://www.jmrenouard.fr 52

×