SlideShare une entreprise Scribd logo
1  sur  52
Télécharger pour lire hors ligne
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 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
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
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
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 » … 
Formulaire type POST 
◦ Envoi d’information 
◦ Les éléments constituent les données à traiter. 
◦<FORM METHOD=« POST » … 
LightPath 2014© - http://www.jmrenouard.fr 
6
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 formulaire 
◦ Zone d’échange d’information 
◦Ne sont transmis qu’à la validation du formulaire 
LightPath 2014© - http://www.jmrenouard.fr 
8
<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
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 entrée 
◦Attribut name 
◦<input name=« nom » …/> 
LightPath 2014© - http://www.jmrenouard.fr 
12
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
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
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 src 
◦<input type=« image » src=« envoi.png » … 
LightPath 2014© - http://www.jmrenouard.fr 
16
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
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
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
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=« multipart/form- data »>…</form> 
Autorisation de transmission en plusieurs 
Requêtes HTTP (multipart ). 
LightPath 2014© - http://www.jmrenouard.fr 
21
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
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 ($_GET as $k => $v) echo « $k = $v »; 
LightPath 2014© - http://www.jmrenouard.fr 
24
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
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 
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
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> 
LightPath 2014© - http://www.jmrenouard.fr 
29
LightPath 2014© - http://www.jmrenouard.fr 
30
Réalisation par script JS 
Peu fiable ( attaque ) 
Inutile si Javascript désactivé 
Facilitation de contournement. 
LightPath 2014© - http://www.jmrenouard.fr 
31
<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
<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
<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
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. 
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
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, 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
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
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
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 
42
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 spams 
LightPath 2014© - http://www.jmrenouard.fr 
44
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
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
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 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
Retrait de balises HTML: strip_tags 
Encodage html: htmlentities 
Encode url: urlencode 
LightPath 2014© - http://www.jmrenouard.fr 
49
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
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 
Jean-Marie RENOUARD 
◦jmrenouard@gmail.com 
◦Twitter: @jmrenouard 
◦http://www.jmrenouard.fr 
LightPath 2014© - http://www.jmrenouard.fr 
52

Contenu connexe

Tendances

Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications JavaAntoine Rey
 
Partie 9: Fonctions Membres — Programmation orientée objet en C++
Partie 9: Fonctions Membres — Programmation orientée objet en C++Partie 9: Fonctions Membres — Programmation orientée objet en C++
Partie 9: Fonctions Membres — Programmation orientée objet en C++Fabio Hernandez
 
Examen principal- php - correction
Examen principal- php - correctionExamen principal- php - correction
Examen principal- php - correctionInes Ouaz
 
Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014Ippon
 
Algebre relationelle
Algebre relationelleAlgebre relationelle
Algebre relationellehnsfr
 
Afficher des Données Issues de Plusieurs Tables : SQL Oracle
Afficher des Données Issues de Plusieurs Tables : SQL OracleAfficher des Données Issues de Plusieurs Tables : SQL Oracle
Afficher des Données Issues de Plusieurs Tables : SQL Oraclewebreaker
 
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)ENSET, Université Hassan II Casablanca
 
Administration ubuntu-serveur-installation-ftp-serveur
Administration ubuntu-serveur-installation-ftp-serveurAdministration ubuntu-serveur-installation-ftp-serveur
Administration ubuntu-serveur-installation-ftp-serveurTECOS
 
Cours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partieCours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partiekadzaki
 
alphorm.com - Formation VMware vSphere 5
alphorm.com - Formation VMware vSphere 5alphorm.com - Formation VMware vSphere 5
alphorm.com - Formation VMware vSphere 5Alphorm
 
Php 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVCPhp 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVCPierre Faure
 
diagramme de séquence UML
diagramme de séquence UMLdiagramme de séquence UML
diagramme de séquence UMLAmir Souissi
 
Cours développement côté serveur
Cours développement côté serveurCours développement côté serveur
Cours développement côté serveurHouda TOUKABRI
 

Tendances (20)

Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications Java
 
Partie 9: Fonctions Membres — Programmation orientée objet en C++
Partie 9: Fonctions Membres — Programmation orientée objet en C++Partie 9: Fonctions Membres — Programmation orientée objet en C++
Partie 9: Fonctions Membres — Programmation orientée objet en C++
 
Examen principal- php - correction
Examen principal- php - correctionExamen principal- php - correction
Examen principal- php - correction
 
cours java complet-2.pdf
cours java complet-2.pdfcours java complet-2.pdf
cours java complet-2.pdf
 
Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014Formation Spring Avancé gratuite par Ippon 2014
Formation Spring Avancé gratuite par Ippon 2014
 
Cours JavaScript
Cours JavaScriptCours JavaScript
Cours JavaScript
 
Support programmation orientée objet c# .net version f8
Support programmation orientée objet c#  .net version f8Support programmation orientée objet c#  .net version f8
Support programmation orientée objet c# .net version f8
 
Angular Avancé
Angular AvancéAngular Avancé
Angular Avancé
 
Algebre relationelle
Algebre relationelleAlgebre relationelle
Algebre relationelle
 
Afficher des Données Issues de Plusieurs Tables : SQL Oracle
Afficher des Données Issues de Plusieurs Tables : SQL OracleAfficher des Données Issues de Plusieurs Tables : SQL Oracle
Afficher des Données Issues de Plusieurs Tables : SQL Oracle
 
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
Développement d'un site web jee de e commerce basé sur spring (m.youssfi)
 
Administration ubuntu-serveur-installation-ftp-serveur
Administration ubuntu-serveur-installation-ftp-serveurAdministration ubuntu-serveur-installation-ftp-serveur
Administration ubuntu-serveur-installation-ftp-serveur
 
Support de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfiSupport de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfi
 
Cours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partieCours php & Mysql - 2éme partie
Cours php & Mysql - 2éme partie
 
alphorm.com - Formation VMware vSphere 5
alphorm.com - Formation VMware vSphere 5alphorm.com - Formation VMware vSphere 5
alphorm.com - Formation VMware vSphere 5
 
Php 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVCPhp 2 - Approfondissement MySQL, PDO et MVC
Php 2 - Approfondissement MySQL, PDO et MVC
 
Cours php
Cours phpCours php
Cours php
 
diagramme de séquence UML
diagramme de séquence UMLdiagramme de séquence UML
diagramme de séquence UML
 
Cours développement côté serveur
Cours développement côté serveurCours développement côté serveur
Cours développement côté serveur
 
Tp java ee.pptx
Tp java ee.pptxTp java ee.pptx
Tp java ee.pptx
 

En vedette (20)

Email et PHP5
Email et PHP5Email et PHP5
Email et PHP5
 
SQL et MySQL
SQL et MySQLSQL et MySQL
SQL et MySQL
 
Fichier XML et PHP5
Fichier XML et PHP5Fichier XML et PHP5
Fichier XML et PHP5
 
Le client HTTP PHP5
Le client HTTP PHP5Le client HTTP PHP5
Le client HTTP PHP5
 
Les structures de données PHP5
Les structures de données PHP5Les structures de données PHP5
Les structures de données PHP5
 
Le client FTP de PHP5
Le client FTP de PHP5Le client FTP de PHP5
Le client FTP de PHP5
 
Configuration PHP5
Configuration PHP5Configuration PHP5
Configuration PHP5
 
PHP5 et les fichiers
PHP5 et les fichiersPHP5 et les fichiers
PHP5 et les fichiers
 
Manuel de sécurisation d'un serveur Linux
Manuel de sécurisation d'un serveur LinuxManuel de sécurisation d'un serveur Linux
Manuel de sécurisation d'un serveur Linux
 
Ssh cookbook
Ssh cookbookSsh cookbook
Ssh cookbook
 
Syntaxe du langage PHP
Syntaxe du langage PHPSyntaxe du langage PHP
Syntaxe du langage PHP
 
Présentation de PHP
Présentation de PHPPrésentation de PHP
Présentation de PHP
 
PHP 5 et la programmation objet
PHP 5 et la programmation objetPHP 5 et la programmation objet
PHP 5 et la programmation objet
 
Sécurité et Quaité de code PHP
Sécurité et Quaité de code PHPSécurité et Quaité de code PHP
Sécurité et Quaité de code PHP
 
MVC / Frameworks PHP
MVC / Frameworks PHPMVC / Frameworks PHP
MVC / Frameworks PHP
 
Client base de données en PHP5
Client base de données en PHP5Client base de données en PHP5
Client base de données en PHP5
 
Javascript et JQuery
Javascript et JQueryJavascript et JQuery
Javascript et JQuery
 
Structure de données en PHP
Structure de données en PHPStructure de données en PHP
Structure de données en PHP
 
Tutorial 1 ahp_relative_model_ver_2.2.x
Tutorial 1 ahp_relative_model_ver_2.2.xTutorial 1 ahp_relative_model_ver_2.2.x
Tutorial 1 ahp_relative_model_ver_2.2.x
 
Regex php
Regex phpRegex php
Regex php
 

Similaire à Gestion de formulaires en PHP

Programmation Android - 09 - Web services
Programmation Android - 09 - Web servicesProgrammation Android - 09 - Web services
Programmation Android - 09 - Web servicesYann Caron
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDOAbdoulaye Dieng
 
Meet up symfony 11 octobre 2016 - Les formulaire
Meet up symfony 11 octobre 2016 - Les formulaireMeet up symfony 11 octobre 2016 - Les formulaire
Meet up symfony 11 octobre 2016 - Les formulaireJulien Vinber
 
Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?Mickael Perraud
 
Ouvrir vos plugins aux autres développeurs - WPTech Nantes
Ouvrir vos plugins aux autres développeurs - WPTech NantesOuvrir vos plugins aux autres développeurs - WPTech Nantes
Ouvrir vos plugins aux autres développeurs - WPTech Nantescorsonr
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantHugo Hamon
 
Atelier WordPress: Création d&rsquo;extension WordPress
Atelier WordPress: Création d&rsquo;extension WordPressAtelier WordPress: Création d&rsquo;extension WordPress
Atelier WordPress: Création d&rsquo;extension WordPressIZZA Samir
 
Sécurité des applications web: attaque et défense
Sécurité des applications web: attaque et défenseSécurité des applications web: attaque et défense
Sécurité des applications web: attaque et défenseAntonio Fontes
 
Persona: un système d'identité pour le Web
Persona: un système d'identité pour le WebPersona: un système d'identité pour le Web
Persona: un système d'identité pour le WebFrancois Marier
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonyVincent Composieux
 
vue j'avais pas vu !!
vue j'avais pas vu !!vue j'avais pas vu !!
vue j'avais pas vu !!Manuel Adele
 
Vue, j’avais pas vu !
Vue, j’avais pas vu !Vue, j’avais pas vu !
Vue, j’avais pas vu !Bruno Bonnin
 
Mieux Développer en PHP avec Symfony
Mieux Développer en PHP avec SymfonyMieux Développer en PHP avec Symfony
Mieux Développer en PHP avec SymfonyHugo Hamon
 
Créer une barre de progression grâce à PHP 5.4
Créer une barre de progression grâce à PHP 5.4Créer une barre de progression grâce à PHP 5.4
Créer une barre de progression grâce à PHP 5.4🏁 Pierre-Henry Soria 💡
 
Cours php -partie 1.pdf
Cours php -partie 1.pdfCours php -partie 1.pdf
Cours php -partie 1.pdfssuserc46a93
 
Communications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHPCommunications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHPjulien pauli
 
Application web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrapApplication web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrapBassem ABCHA
 
Service WEB de type REST avec Java
Service WEB de type REST avec JavaService WEB de type REST avec Java
Service WEB de type REST avec JavaFrancois ANDRE
 

Similaire à Gestion de formulaires en PHP (20)

Programmation Android - 09 - Web services
Programmation Android - 09 - Web servicesProgrammation Android - 09 - Web services
Programmation Android - 09 - Web services
 
php2 : formulaire-session-PDO
php2 : formulaire-session-PDOphp2 : formulaire-session-PDO
php2 : formulaire-session-PDO
 
Meet up symfony 11 octobre 2016 - Les formulaire
Meet up symfony 11 octobre 2016 - Les formulaireMeet up symfony 11 octobre 2016 - Les formulaire
Meet up symfony 11 octobre 2016 - Les formulaire
 
Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?Quoi de neuf dans Zend Framework 1.10 ?
Quoi de neuf dans Zend Framework 1.10 ?
 
Ouvrir vos plugins aux autres développeurs - WPTech Nantes
Ouvrir vos plugins aux autres développeurs - WPTech NantesOuvrir vos plugins aux autres développeurs - WPTech Nantes
Ouvrir vos plugins aux autres développeurs - WPTech Nantes
 
Symfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 PerformantSymfony2 - Un Framework PHP 5 Performant
Symfony2 - Un Framework PHP 5 Performant
 
HTML5
HTML5HTML5
HTML5
 
HTML5 en projet
HTML5 en projetHTML5 en projet
HTML5 en projet
 
Atelier WordPress: Création d&rsquo;extension WordPress
Atelier WordPress: Création d&rsquo;extension WordPressAtelier WordPress: Création d&rsquo;extension WordPress
Atelier WordPress: Création d&rsquo;extension WordPress
 
Sécurité des applications web: attaque et défense
Sécurité des applications web: attaque et défenseSécurité des applications web: attaque et défense
Sécurité des applications web: attaque et défense
 
Persona: un système d'identité pour le Web
Persona: un système d'identité pour le WebPersona: un système d'identité pour le Web
Persona: un système d'identité pour le Web
 
Soutenance Zend Framework vs Symfony
Soutenance Zend Framework vs SymfonySoutenance Zend Framework vs Symfony
Soutenance Zend Framework vs Symfony
 
vue j'avais pas vu !!
vue j'avais pas vu !!vue j'avais pas vu !!
vue j'avais pas vu !!
 
Vue, j’avais pas vu !
Vue, j’avais pas vu !Vue, j’avais pas vu !
Vue, j’avais pas vu !
 
Mieux Développer en PHP avec Symfony
Mieux Développer en PHP avec SymfonyMieux Développer en PHP avec Symfony
Mieux Développer en PHP avec Symfony
 
Créer une barre de progression grâce à PHP 5.4
Créer une barre de progression grâce à PHP 5.4Créer une barre de progression grâce à PHP 5.4
Créer une barre de progression grâce à PHP 5.4
 
Cours php -partie 1.pdf
Cours php -partie 1.pdfCours php -partie 1.pdf
Cours php -partie 1.pdf
 
Communications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHPCommunications Réseaux et HTTP avec PHP
Communications Réseaux et HTTP avec PHP
 
Application web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrapApplication web php5 html5 css3 bootstrap
Application web php5 html5 css3 bootstrap
 
Service WEB de type REST avec Java
Service WEB de type REST avec JavaService WEB de type REST avec Java
Service WEB de type REST avec Java
 

Dernier

mémoire genie civil presenté lors de la soutenance de mémoire
mémoire genie civil presenté lors de la soutenance de mémoiremémoire genie civil presenté lors de la soutenance de mémoire
mémoire genie civil presenté lors de la soutenance de mémoireEzechiasSteel
 
le probleme de la planification JSP exposee (2) (2).pptx
le probleme de la planification JSP exposee (2) (2).pptxle probleme de la planification JSP exposee (2) (2).pptx
le probleme de la planification JSP exposee (2) (2).pptximaneeaouattahee
 
pdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdf
pdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdfpdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdf
pdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdfMedAbdelhayeSidiAhme
 
Algo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigésAlgo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigésSana REFAI
 
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024Ville de Châteauguay
 

Dernier (6)

mémoire genie civil presenté lors de la soutenance de mémoire
mémoire genie civil presenté lors de la soutenance de mémoiremémoire genie civil presenté lors de la soutenance de mémoire
mémoire genie civil presenté lors de la soutenance de mémoire
 
le probleme de la planification JSP exposee (2) (2).pptx
le probleme de la planification JSP exposee (2) (2).pptxle probleme de la planification JSP exposee (2) (2).pptx
le probleme de la planification JSP exposee (2) (2).pptx
 
pdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdf
pdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdfpdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdf
pdfcoffee.com_4-production-fond-des-puits-completion-pdf-free.pdf
 
Algo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigésAlgo II: les files cours + exercices corrigés
Algo II: les files cours + exercices corrigés
 
JTC 2024 Bâtiment et Photovoltaïque.pdf
JTC 2024  Bâtiment et Photovoltaïque.pdfJTC 2024  Bâtiment et Photovoltaïque.pdf
JTC 2024 Bâtiment et Photovoltaïque.pdf
 
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
Présentation_Soirée-Information_ Surverse_Thibert _30 avril 2024
 

Gestion de formulaires en PHP

  • 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. 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. 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. LightPath 2014© - http://www.jmrenouard.fr 5
  • 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. LightPath 2014© - http://www.jmrenouard.fr 7
  • 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. <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. LightPath 2014© - http://www.jmrenouard.fr 10
  • 11. Les entrées Les sélecteurs Les zones de texte LightPath 2014© - http://www.jmrenouard.fr 11
  • 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. 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. 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. Radio: case type radio/choix exclusif Checkbox: case type case à cocher LightPath 2014© - http://www.jmrenouard.fr 15
  • 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. 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. 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. 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. LightPath 2014© - http://www.jmrenouard.fr 20
  • 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. 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. LightPath 2014© - http://www.jmrenouard.fr 23
  • 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. 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. LightPath 2014© - http://www.jmrenouard.fr 26
  • 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. LightPath 2014© - http://www.jmrenouard.fr 28
  • 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. LightPath 2014© - http://www.jmrenouard.fr 30
  • 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. <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. <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. <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. LightPath 2014© - http://www.jmrenouard.fr 35
  • 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. LightPath 2014© - http://www.jmrenouard.fr 37
  • 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. 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. 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. LightPath 2014© - http://www.jmrenouard.fr 41
  • 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. LightPath 2014© - http://www.jmrenouard.fr 43
  • 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. 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. 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. LightPath 2014© - http://www.jmrenouard.fr 47
  • 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. Retrait de balises HTML: strip_tags Encodage html: htmlentities Encode url: urlencode LightPath 2014© - http://www.jmrenouard.fr 49
  • 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. Documentation du PHP http://www.php.net/docs LightPath 2014© - http://www.jmrenouard.fr 51
  • 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