Overblog Suivre ce blog
Editer l'article Administration Créer mon blog

Safe_mode et restrictions

par Morgan

publié dans php - ajax

Safe_mode et restrictions

 


PHP contient différentes directives permettant d’activer des restrictions d’accès. Ces
options rendent impossible l’accès à certaines ressources du système et à certaines fonc-
tionnalités du langage. Elles sont généralement utilisées sur les configurations où
plusieurs utilisateurs partagent les droits d’accès du serveur web (afin de limiter
quelqu’un à ses propres fichiers par exemple) ou pour limiter des problèmes potentiels en
prévision de failles de sécurité (l’attaquant aura alors moins de possibilités pour nuire).
Nous vous recommandons de toujours activer ces options par défaut, même si vous
contrôlez entièrement le serveur ; il sera toujours temps de diminuer les restrictions au
cas par cas quand vous aurez besoin d’une fonctionnalité qui a été limitée.

 

  • Safe_mode

 

La directive safe_mode prend comme valeur un booléen. Activée, elle permet d’interdire
certaines actions. Ainsi, il est possible d’interdire l’exécution de programmes externes,
ou de désactiver certaines fonctions et classes. L’avantage principal est de vérifier la
concordance entre le propriétaire du script et le propriétaire des fichiers auxquels PHP
tente d’accéder.
L’interpréteur limite donc l’utilisateur à la manipulation de ses propres fichiers et pas
tous ceux auxquels il a accès normalement. Par exemple, l’utilisateur Pierre se verra refu-
ser l’accès aux fichiers d’Éric, même si le serveur web devrait être normalement capable
de les lire.

 

  • Open_basedir

 

La directive open_basedir prend en paramètre une série de répertoires. Quand elle n’est
pas vide, PHP n’autorise la lecture et l’écriture des fichiers que s’ils sont contenus dans
un de ces répertoires ou des sous-répertoires.
Il est ainsi possible de définir une sorte d’architecture virtuelle dont PHP ne pourra pas
sortir pour ce qui est de l’accès aux fichiers.

 

  • Sources et fichiers externes

 

PHP a une fonctionnalité très pratique, qui est de pouvoir accéder à des ressources autres
que des fichiers locaux de manière transparente. Il est ainsi possible de lire une page web
d’un autre serveur comme si c’était un fichier local. L’étendue des possibilités est décrite
dans le chapitre sur la gestion des flux.
Cette fonctionnalité ne présente aucun risque en elle-même, mais peut, si votre applicatif
comporte une vulnérabilité, ouvrir des possibilités supplémentaires à l’attaquant. Par
exemple, on peut imaginer un code fictif contenant la ligne include($_GET['fichier']) où
le programmeur a oublié de contrôler le contenu de la donnée fournie par l’utilisateur. Si
la directive de configuration allow_url_fopen est activée (c’est le cas par défaut), alors
l’attaquant pourrait fournir l’adresse sur Internet d’un fichier texte contenant du code
PHP. Ce code serait alors exécuté par votre application, avec les droits associés.
Cet exemple n’est pas si fictif, car c’est une vulnérabilité qui est assez fréquente. Il s’agit
d’une des failles de sécurité les plus communes dans les applications Open Source en
PHP. Il est vrai que le problème ne vient pas de la fonctionnalité, mais du programmeur
qui n’a pas vérifié ce qu’a envoyé le visiteur avant de l’utiliser. Pourtant, si l’utilisation
transparente des fichiers distants avait été désactivée, l’attaquant aurait eu beaucoup plus
de mal à exploiter la faille.
Si vous n’utilisez pas cette fonctionnalité ou si vous pouvez vous en passer facile-
ment, vous avez tout intérêt à la désactiver. Votre application ne sera pas plus sûre,
mais l’exploitation des vulnérabilités qui pourraient exister sera potentiellement plus
complexe.

 

  • Modules et processus externes

 

Ces deux jeux de directives ont toutefois une portée limitée. En effet, chaque module ou
fonction doit explicitement vérifier s’il a le droit d’accéder à une ressource avant de
l’utiliser. Les fonctions standards de PHP ainsi que celles de l’essentiel des modules
distribués avec PHP se comportent de cette manière.
L’orientation modulaire de PHP vous permet d’en ajouter simplement. Aussi, il est tout à
fait possible que vous en récupériez un sur Internet, même d’une source fiable, qui pour-
rait ne pas vérifier ses droits. Il convient donc de faire attention si vous employez des
modules peu courants.
Les fonctions complexes des modules peuvent comporter le même problème : si un nom
de fichier peut être fourni de manière détournée, il ne sera pas soumis au contrôle
d’accès. De même, si vous laissez la possibilité à PHP d’exécuter un programme externe,
rien ne pourra contrôler les accès dudit programme.

 

extrait de "php5 avancé qutrième édition"

Commenter cet article