Vous êtes sur le site public du Cert-IST
Hébergement de sites PHP et sécurité

Date :26 Octobre 2006

Publication: Article

L'essor de l'hébergement de sites web (personnels ou professionnels) a permis aux ASP ("Application Service Providers") de proposer des solutions techniques de plus en plus performantes. Aujourd'hui, il est très courant que les ASP proposent l'hébergement de sites web écrits en langage PHP.

Cette offre peut être une source de problèmes, car les applications PHP les plus souvent installées (forums, galeries photos, blogs, ...) peuvent contenir des failles de sécurité. Ainsi, la facilité d'utilisation de ce type d'application couplée avec l'inexpérience des utilisateurs (pas de mise à jour régulière lorsqu'une faille est découverte) entrainent la présence, actuellement, de nombreux sites PHP compromis sur la toile. Ces sites sont alors souvent utilisés pour mener à bien des attaques de type "phishing" (installation de fausses pages "bancaires" sur les sites PHP compromis).

Afin de limiter ce phénomène, les ASP sécurisent donc en général les environnements PHP proposés pour l'hébergement.

Cette sécurisation passe (au moins) par trois directives clé de PHP qui sont positionnées dans le fichier de configuration "php.ini" : "safe_mode", "register_global" et "open_basedir".
  • Le mode "safe_mode" est un mode sécurisé de PHP, permettant de contrôler les accès au système par les scripts PHP.
  • La directive "register_global" (qui doit être positionnée à "off") permet d'empêcher les attaques de type "PHP include" (cf. l'article consacré à ce sujet dans le bulletin de septembre 2003).
  • La directive "open_basedir" limite les fichiers accessibles par PHP dans l'arborescence.

Dans un environnement mutualisé, il est nécessaire que les utilisateurs/clients n'aillent pas empiéter les espaces dédiés des autres personnes. Mais il n'est pas forcément aisé de positionner la directive "open_basedir" pour chaque utilisateur dans le fichier "php.ini".

Pour cela, il existe une méthode qui consiste à positionner directement ce type de variables dans le fichier de configuration même du serveur web (Apache en général - fichier : "httpd.conf") via les directives "php_admin_flag" ou "php_admin_value".

Exemple de configuration d'un espace client :

<Directory /usr/home/monsite/public_html/>

Options FollowSymLinks MultiViews Indexes
AllowOverride None
php_admin_flag safe_mode 1
php_admin_value open_basedir /usr/home/monsite/public_html/

</Directory>

Ainsi positionnées, ces directives ne pourront pas être modifiées par un utilisateur (client de l'hébergeur) via les fonctionnalités de configuration qui lui sont offertes (fichier ".htaccess", …).

Malheureusement ce type de protection peut être contourné par un script PHP malveillant qui aura été préalablement déposé sur le serveur web vulnérable.

En effet, une utilisation habile de la fonction " ini_restore()" permettra de ré-initialiser les fonctions données en arguments avec les valeurs contenues dans le fichier "php.ini". Ainsi, les valeurs définies dans le fichier de configuration d'Apache seront inhibées. L'utilisateur malveillant pourra alors avoir accès, via des scripts PHP, à des parties du système (espace des autres clients par exemple) auquel il n'aurait pas normalement accès.

Pour remédier à ce problème, un correctif est proposé par l'éditeur PHP dans la version CVS (http://cvs.php.net/viewcvs.cgi/php-src/NEWS ) et par certains éditeurs Linux (cf. ci-dessous).

Pour plus d'information :