Vous êtes sur la page 1sur 13

PHP: Traitement des formulaires

M. BOUMEDIENE

Institut National des Télécommunications et des Technologies


de l’Information et de la Communication
e-mail: mboumediene[at]inttic.dz

xx 2021

1/13 Mohammed Boumediene - INTTIC Technologies web 2


Plan

1 Traitement de formulaire

2 Filtrer les variables

3 Cross-site Scripting

2/13 Mohammed Boumediene - INTTIC Technologies web 2


Traitement de formulaire

Plan

1 Traitement de formulaire

2 Filtrer les variables

3 Cross-site Scripting

3/13 Mohammed Boumediene - INTTIC Technologies web 2


Traitement de formulaire

Comment PHP manipule les formulaires

PHP offre un ensemble de variables superglobales ($_GET, $_POST, et


$_REQUEST) pour récupérer les données envoyées via les formulaires
Ces variables sont pré-définies et accessibles dans tout script PHP
$_GET et $_POST sont des tableaux associatifs des valeurs passées au script
courant via les méthodes get et post respectivement
$_REQUEST est aussi un tableau associatif mais contenant des valeurs passées
au script via l’une des méthodes get ou post
La méthode d’envoi d’un formulaire est définie par l’attribut method de la balise
form (revoir HTML si c’est nécessaire)
Quant à l’attribut action de la balise form, il définit l’entité qui sera sollicitée pour
traiter le formulaire
Pour récupérer une valeur envoyée via un formulaire, il suffit d’utiliser son nom
(name) comme clé dans le tableau associatif adéquat ($_GET, $_POST, ou
$_REQUEST)
Voir l’exemple suivant pour bien comprendre le principe

4/13 Mohammed Boumediene - INTTIC Technologies web 2


Traitement de formulaire

Exemple de formulaire
<!−− myForm . php −−>
<form a c t i o n = " myForm . php " method= " g e t ">
Name<b r />
<i nput type= " t e x t " name=" theName " /><b r /><b r />
E−mail<b r />
<i nput
type= " e m a i l "
name=" t h e E m a i l "
/><b r /><b r />
F a v o r i t e S u b j e c t ( s )<b r />
<i nput type= " c h e c k b o x " name=" s u b j e c t s [ ] " v a l u e = " math "
,→ />Math
<i nput type= " c h e c k b o x " name=" s u b j e c t s [ ] " v a l u e = " c o d i n g "
,→ />C o d i n g
<i nput type= " c h e c k b o x " name=" s u b j e c t s [ ] " v a l u e = " e n g l i s h "
,→ />E n g l i s h <b r /><b r />
G e n d e r<b r />
<i nput type= " r a d i o " name=" g e n d e r " v a l u e = "m" />Male
<i nput type= " r a d i o " name=" g e n d e r " v a l u e = " f " />Female
<i nput type= " s u b m i t " name=" s u b m i t B u t t o n " v a l u e = " Submit " />
</ form>

5/13 Mohammed Boumediene - INTTIC Technologies web 2


Traitement de formulaire

La suite de myForm.php
Notre script PHP teste si l’utilisateur a bien cliqué sur le bouton "Submit" et cela
on vérifiant l’existence de l’élément submitButton dans $_GET

i f ( i s s e t ($_GET [ " s u b m i t B u t t o n " ] ) )


p r i n t _ r ($_GET) ;

Pour l’instant on affiche simplement le contenu de $_GET c.-a.-d. ce que nous a


envoyé l’utilisateur via le formulaire

// A r r a y ( [ theName ] => ahmed


// [ t h e E m a i l ] => a h m e d @ i n t t i c . dz
// [ s u b j e c t s ] => A r r a y ( [ 0 ] => c o d i n g [ 1 ] => e n g l i s h )
// [ g e n d e r ] => m
// [ s u b m i t B u t t o n ] => Submit )

Maintenant avant de pouvoir manipuler les données reçues, il faut les filtrer et ce
processus consiste à nettoyer et à valider ces données ou ces variables
Le filtrage des données et très important car un utilisateur peut nous envoyer
n’import quoi soit de manière volontaire ou involontaire

6/13 Mohammed Boumediene - INTTIC Technologies web 2


Filtrer les variables

Plan

1 Traitement de formulaire

2 Filtrer les variables

3 Cross-site Scripting

7/13 Mohammed Boumediene - INTTIC Technologies web 2


Filtrer les variables

Nettoyer les variables

Première étape du filtrage consiste à nettoyer les variables des caractères invalides
La fonction filter_var() nettoie les variables en se basant sur un ensemble de filtres
pré-définis en PHP (ici la liste complète des filtres)

$ e m a i l = " a h m e d @ @ i n t t i c . dz // " ;
echo " e m a i l = " , f i l t e r _ v a r ( $ e m a i l , FILTER_SANITIZE_EMAIL ) ," < br >";
// e m a i l = a h m e d @ @ i n t t i c . dz
$a = " ∗ 1 5 5 5 5 5 5 5 5 5 5 5 5 5 5 i " ;
echo " a = " , f i l t e r _ v a r ( $a , FILTER_SANITIZE_NUMBER_INT ) ," < br >";
// a = 15 5 55 55 55 5 55 55 5
$b = " − 1 5 2 , 6 3 6 . 3 6 5 // / " ;
echo " b = " , f i l t e r _ v a r ( $b ,
,→ FILTER_SANITIZE_NUMBER_FLOAT , FILTER_FLAG_ALLOW_FRACTION) ," < br >
// b = −152636.365
$ u r l = "www . i n t t i c Ã Ć . Âřdz " ;
echo " u r l = " , f i l t e r _ v a r ( $ u r l , FILTER_SANITIZE_URL ) ," < br >";
// u r l = www . i n t t i c . dz

8/13 Mohammed Boumediene - INTTIC Technologies web 2


Filtrer les variables

Valider les variables


La fonction filter_var() permet également de valider les variables à l’aide d’un
ensemble de filtres pré-définis en PHP (ici la liste complète des filtres)
Dans ce contexte, filter_var() retourne un booléen, true si la variable est validée,
false sinon
$ e m a i l = " a h m e d @ @ i n t t i c . dz // " ;
$ e m a i l = f i l t e r _ v a r ( $ e m a i l , FILTER_SANITIZE_EMAIL ) ;
i f ( f i l t e r _ v a r ( $ e m a i l , FILTER_VALIDATE_EMAIL ) )
echo ' y o u r e−m a i l i s v a l i d ' , '<br>' ;
else
echo ' y o u r e−m a i l i s n o t v a l i d ' , '<br>' ;

$a = " 1 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 5 " ;
$a = f i l t e r _ v a r ( $a , FILTER_SANITIZE_NUMBER_INT ) ;
i f ( f i l t e r _ v a r ( $a , FILTER_VALIDATE_INT ) )
echo ' y o u r i n t i s v a l i d ' , '<br>' ;
else
echo ' y o u r i n t i s n o t v a l i d ' , '<br>' ;

Autres filtres : FILTER_VALIDATE_FLOAT,


FILTER_VALIDATE_BOOLEAN, FILTER_VALIDATE_IP, et
FILTER_VALIDATE_URL
9/13 Mohammed Boumediene - INTTIC Technologies web 2
Cross-site Scripting

Plan

1 Traitement de formulaire

2 Filtrer les variables

3 Cross-site Scripting

10/13 Mohammed Boumediene - INTTIC Technologies web 2


Cross-site Scripting

C’est quoi le cross-site scripting ?


Cross-side scripting communément appelé XSS est un type d’attaque permettant
d’injecter des scripts malicieux dans une page web, induisant des actions sur les
navigateurs des utilisateurs
Dans le contexte PHP, un hacker injecte un script dans notre formulaire. Par la
suite, si les données du formulaire sont sauvegardées (dans une base de données)
et ré-envoyées à d’autres utilisateurs, alors le script malicieux sera exécuté au
niveau de leur navigateurs
Ajoutez l’instruction suivante dans le script PHP de myForm.php
i f ( i s s e t ($_GET [ ' theName ' ] ) )
echo " You name : " , $_GET [ ' theName ' ] ," < br >";

Rafraichissez au niveau de votre navigateur le formulaire précédent "myForm.php",


saisissez "<script>alert(’Hacked’)</script>" dans le champ Name, et cliquez sur
le bouton Submit
Normalement, vous aurez une fenêtre "alert" avec le message "Hacked"
⇒ en fait, le script a était envoyé au serveur et ensuite le serveur l’a retourné à
vous ce qui constitue une vulnérabilité

11/13 Mohammed Boumediene - INTTIC Technologies web 2


Cross-site Scripting

htmlspecialchars comme solution

Comme solution, PHP propose la fonction htmlspecialchars qui convertit les


caractères spéciaux en entités HTML
⇒ un caractère spécial est un caractère ayant une signification particulière en
HTML comme < et >
⇒ htmlspecialchars convertit ces caractères en &lt; et &gt;

i f ( i s s e t ($_GET [ ' theName ' ] ) )


echo " You name : " , h t m l s p e c i a l c h a r s ($_GET [ ' theName ' ] ) ," < br >";

Ainsi le serveur retourne à l’utilisateur :


&lt;script&gt;alert(&quot;hached&quot;)&lt;/script&gt;
⇒ au lieu de : <script>alert(’Hacked’)</script>
⇒ au final, aucune action ne sera exécutée au niveau du navigateur de l’utilisateur

12/13 Mohammed Boumediene - INTTIC Technologies web 2


Cross-site Scripting

Merci pour votre attention! Des Questions?

13/13 Mohammed Boumediene - INTTIC Technologies web 2

Vous aimerez peut-être aussi