gestion de formulaires en php

Post on 03-Jul-2015

248 Views

Category:

Engineering

2 Downloads

Preview:

Click to see full reader

DESCRIPTION

Présentation de la gestion des formulaires en PHP5

TRANSCRIPT

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 œuvre

◦ jmrenouard@lightpath.fr

Jean-Marie RENOUARD ◦ jmrenouard@gmail.com

◦ Twitter: @jmrenouard

◦ http://www.jmrenouard.fr

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

top related