gestion de formulaires en php

52
Jean-Marie Renouard LightPath 2014©

Upload: jean-marie-renouard

Post on 03-Jul-2015

248 views

Category:

Engineering


2 download

DESCRIPTION

Présentation de la gestion des formulaires en PHP5

TRANSCRIPT

Page 1: Gestion de formulaires en PHP

Jean-Marie Renouard

LightPath 2014©

Page 2: Gestion de formulaires en PHP

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

Page 3: Gestion de formulaires en PHP

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

Page 4: Gestion de formulaires en PHP

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

Page 5: Gestion de formulaires en PHP

LightPath 2014© - http://www.jmrenouard.fr 5

Page 6: Gestion de formulaires en PHP

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

Page 7: Gestion de formulaires en PHP

LightPath 2014© - http://www.jmrenouard.fr 7

Page 8: Gestion de formulaires en PHP

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

Page 9: Gestion de formulaires en PHP

<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

Page 10: Gestion de formulaires en PHP

LightPath 2014© - http://www.jmrenouard.fr 10

Page 11: Gestion de formulaires en PHP

Les entrées

Les sélecteurs

Les zones de texte

LightPath 2014© - http://www.jmrenouard.fr 11

Page 12: Gestion de formulaires en PHP

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

Page 13: Gestion de formulaires en PHP

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

Page 14: Gestion de formulaires en PHP

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

Page 15: Gestion de formulaires en PHP

Radio: case type radio/choix exclusif

Checkbox: case type case à cocher

LightPath 2014© - http://www.jmrenouard.fr 15

Page 16: Gestion de formulaires en PHP

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

Page 17: Gestion de formulaires en PHP

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

Page 18: Gestion de formulaires en PHP

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

Page 19: Gestion de formulaires en PHP

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

Page 20: Gestion de formulaires en PHP

LightPath 2014© - http://www.jmrenouard.fr 20

Page 21: Gestion de formulaires en PHP

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

Page 22: Gestion de formulaires en PHP

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

Page 23: Gestion de formulaires en PHP

LightPath 2014© - http://www.jmrenouard.fr 23

Page 24: Gestion de formulaires en PHP

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

Page 25: Gestion de formulaires en PHP

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

Page 26: Gestion de formulaires en PHP

LightPath 2014© - http://www.jmrenouard.fr 26

Page 27: Gestion de formulaires en PHP

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

Page 28: Gestion de formulaires en PHP

LightPath 2014© - http://www.jmrenouard.fr 28

Page 29: Gestion de formulaires en PHP

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

Page 30: Gestion de formulaires en PHP

LightPath 2014© - http://www.jmrenouard.fr 30

Page 31: Gestion de formulaires en PHP

Réalisation par script JS

Peu fiable ( attaque )

Inutile si Javascript désactivé

Facilitation de contournement.

LightPath 2014© - http://www.jmrenouard.fr 31

Page 32: Gestion de formulaires en PHP

<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

Page 33: Gestion de formulaires en PHP

<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

Page 34: Gestion de formulaires en PHP

<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

Page 35: Gestion de formulaires en PHP

LightPath 2014© - http://www.jmrenouard.fr 35

Page 36: Gestion de formulaires en PHP

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

Page 37: Gestion de formulaires en PHP

LightPath 2014© - http://www.jmrenouard.fr 37

Page 38: Gestion de formulaires en PHP

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

Page 39: Gestion de formulaires en PHP

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

Page 40: Gestion de formulaires en PHP

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

Page 41: Gestion de formulaires en PHP

LightPath 2014© - http://www.jmrenouard.fr 41

Page 42: Gestion de formulaires en PHP

$allow=array(‘nom ’, ‘comments’);

foreach ($_POST as $key => $val) {

if (! in_array($allow, $key) {

unset($_POST[$key]);

}

}

LightPath 2014© - http://www.jmrenouard.fr 42

Page 43: Gestion de formulaires en PHP

LightPath 2014© - http://www.jmrenouard.fr 43

Page 44: Gestion de formulaires en PHP

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

Page 45: Gestion de formulaires en PHP

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

Page 46: Gestion de formulaires en PHP

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

Page 47: Gestion de formulaires en PHP

LightPath 2014© - http://www.jmrenouard.fr 47

Page 48: Gestion de formulaires en PHP

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

Page 49: Gestion de formulaires en PHP

Retrait de balises HTML: strip_tags

Encodage html: htmlentities

Encode url: urlencode

LightPath 2014© - http://www.jmrenouard.fr 49

Page 50: Gestion de formulaires en PHP

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

Page 51: Gestion de formulaires en PHP

Documentation du PHP http://www.php.net/docs

LightPath 2014© - http://www.jmrenouard.fr 51

Page 52: Gestion de formulaires en PHP

LightPath: ◦ Société de conseil et d’ingénierie

◦ Formations, Conseil, Audit et mise en œuvre

[email protected]

Jean-Marie RENOUARD ◦ [email protected]

◦ Twitter: @jmrenouard

◦ http://www.jmrenouard.fr

LightPath 2014© - http://www.jmrenouard.fr 52