Le filtrage et l'échappement des données en PHP 5 : introduction à la technique du Poka-Yoké
Date de publication : 5 juin 2007
I. Introduction
I-A. Remerciements
I-B. Problématique
I. Introduction
I-A. Remerciements
Je remercie chaleureusement tous ceux qui m'ont aidé lors de la conception de ce framework :
pcaboche,
Yoshio,
wamania et
doctorrock, sans oublier Marco Tabini pour avoir fourni l'idée de départ.
I-B. Problématique
Les développeurs font souvent des erreurs tandis qu'un ordinateur n'oublie rien. Ainsi, il est souvent plus fiable de déléguer à l'ordinateur tout ce qui est sensible, plutôt que d'essayer de nous en occuper nous-mêmes.
La méthode du Poka-Yoké nous oblige à éliminer les mauvaises solutions de manière à ne conserver que la bonne.
Le code suivant, aussi simple soit-il, est une faille de sécurité (XSS) :
echo $_GET['test'];
echo $_POST['login'];
|
En effet, il suffit d'insérer du code Javascript dans le contenu de la variable "test" de l'URI pour obtenir une faille XSS.
Cependant, il existe une solution simple pour résoudre ce problème :
Mais bien sûr, utiliser ce type de code tout au long du script est fastidieux. De plus, nous n'avons aucune garantie contre les oublis du développeur : négliger d'utiliser htmlentities() sur une seule variable donne lieu à une faille XSS...
Une autre solution consiste à déclarer une fonction pour réduire la taille du code à écrire :
function html($string)
{
return htmlentities($string, ENT_QUOTES, 'utf-8');
}
echo html($_GET['test']);
echo html($_POST['login']);
|
Chaque ligne est maintenant plus courte à écrire, mais nous n'avons toujours aucune garantie que le développeur utilise systématiquement la fonction html() pour protéger l'internaute d'une faille XSS.


Copyright © 2006 Guillaume Rossolini.
Aucune reproduction, même partielle, ne peut être faite
de ce site ni de l'ensemble de son contenu : textes, documents, images, etc.
sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à
trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.