Comment limiter les applications PHP à leurs propres répertoires et à leur propre php.ini?
-
11-07-2019 - |
Question
J'exécute plusieurs applications PHP sur mon Mac, sous OS X 10.5.6, Apache 2, PHP 5. J'ai des sous-domaines configurés pour chaque projet, des entrées de fichier hôte pour chaque sous-domaine et des blocs de répertoire virtuel dans la configuration Apache. . Donc
project1.localhost va dans / Bibliothèque / WebServer / Documents / Project1
project2.localhost va dans / Bibliothèque / WebServer / Documents / Project2
etc ...
Cependant, cette méthode n'isole pas vraiment & "; isoler &"; les applications web. Par exemple, si j'inclus un script comme celui-ci:
<?php
include("/includes/include.php");
?>
Il fait référence au script à partir du répertoire de base de mon ordinateur. Donc, il accède
C: /includes/include.php
Y a-t-il un moyen de le référencer
C: /Library/WebServer/Documents/Project2/includes/include.php
En gros, assurez-vous que rien ne se trouve en dehors de son propre répertoire. Aussi, est-il possible d’utiliser php.ini par sous-domaine également?
La solution
Je crois qu'il est possible de définir un php.ini par hôte virtuel
<VirtualHost *:80>
...
PHPINIDir /full/path/to/php/ini/
</VirtualHost>
De cette façon, vous pouvez personnaliser open_basedir et d'autres
Autres conseils
Vous pouvez limiter la capacité des scripts à afficher tout ce qui se trouve au-dessus d'une arborescence de dossiers spécifique en ajoutant le open_basedir directive un bloc de dossier dans le fichier httpd.conf. Cela devrait ressembler à:
< REPERTOIRE / complet / chemin / vers / dossier / contenant / script / >
php_admin_value open_basedir & "/ full / chemin / vers / top / dossier / de / désir / arbre / &";
< / REPERTOIRE >
Une chose - si vous ne terminez pas le chemin avec un /, alors c'est une correspondance générique. En d'autres termes, & Quot; / var / etc / my & Quot; correspondra à " / var / etc / myFolder " ainsi que & "; var / etc / myMothersFolder &"; tandis que & "/ var / etc / my / &"; correspondra uniquement à ce nom de dossier exact.
En ce qui concerne l'isolation de l'application ~, s'agit-il de sécuriser les scripts PHP afin qu'ils ne puissent pas accéder aux autres? S'il vous plaît élaborer -
En ce qui concerne php.ini - Je ne connais aucun moyen d’utiliser un php.ini spécifique par répertoire, mais vous pouvez certainement créer une page d’inclusion php avec un tas de lignes ini_set (), peut-être quelque chose comme cela. <
<?php
// in your header or along top of all php modules in your pap
require_once ( '/path/to/includes/ini_set.php' );
// ...
?>
et le script ini_set.php:
<?php
// one of these for each override of defaults set in php.ini file --
ini_set ( $varname, $newvalue );
ini_set ( $varname, $newvalue );
ini_set ( $varname, $newvalue );
?>
Si vous souhaitez en savoir plus sur la fonction ini_set (), voici la page de documentation sur php.net: http://us3.php.net/ini_set
J'espère que c'était un peu utile ~
Le meilleur moyen de le faire est d'utiliser PHP via FCGI (mod_fcgid). De cette façon, vous pouvez exécuter PHP en utilisant un utilisateur différent et un php.ini différent par hôte.
Voici un exemple de configuration d’une telle configuration sous Ubuntu: http://www.howtoforge.com/how-to-set-up-apache2-with-mod_fcgid-and-php5-on-ubuntu-8.10
Si vous souhaitez utiliser le nom de chemin complet, vous pouvez utiliser celui-ci:
<?php
include dirname( __FILE__ ) . '/includes/include.php';
?>
Essayez un chemin relatif! J'aime:
<?php
include("./includes/include.php");
?>
ou
<?php
include("includes/include.php");
?>