Vous êtes sur le site public du Cert-IST
Problèmes liés au module "mod_rewrite" de Apache

Date :29 Juin 2005

Publication: Article

Le module "mod_rewrite" est un composant optionnel pour le serveur Web Apache permettant de définir des règles de ré-écriture qui seront appliquées aux requêtes des utilisateurs. Il est par ce moyen possible de dire que toute requête de consultation du type http//www.mon_site.com/securite/ doit en fait être transformée par le serveur Web en http//www.mon_site.com/sujet/technique/securite/.

Il est aussi possible ainsi d'interdire l'accès à certaines pages (par exemple en fonction de la provenance de l'internaute).

Cette fonctionnalité est intéressante, et on peut vouloir l'utiliser à des fins de sécurité pour implémenter des restrictions d'accès. Dans ce cas, il est important de savoir que cette fonction peut être facilement contournée. En effet, "mod_rewrite" traite la requête utilisateur telle qu'elle lui a été envoyée, sans aucune transformation préalable. Ainsi, si un utilisateur tape dans son navigateur l'URL "http//www.mon_site.com//securite/" (deux slashs sont présents devant le mot "securite"), alors pour "mod_rewrite" cette URL ne correspond pas au modèle "http//www.mon_site.com/securite/" qui a été donné dans les règles de ré-écriture, et aucune ré-écriture n'est donc appliquée (alors que ces 2 URL désignent toutes les deux le même emplacement). Le simple ajout d'un second slash a donc permis de contourner la fonctionnalité de ré-écriture.

Il s'agit aujourd'hui d'une limitation fonctionnelle du module "mod_rewrite", et les développeurs d'Apache n'ont pas prévu de changer rapidement ce comportement dans les versions futures (par exemple en y incluant une fonction de simplification qui mettrait les URL sous forme canonique). A défaut il faut donc être très prudent si l'on utilise le module "mod_rewrite" pour des fonctions de sécurité, et il faut impérativement connaître cette limitation. L'article Apache donné en référence ci-dessous propose une solution, mais celle-ci revient simplement à prendre en compte la limitation au moment de la conception des règles de ré-écriture.

Pour plus d'information :