Come posso limitare le app PHP alle proprie directory e al proprio php.ini?
-
11-07-2019 - |
Domanda
Sto eseguendo più app PHP sul mio Mac, eseguendo OS X 10.5.6, Apache 2, PHP 5. Ho una configurazione dei sottodomini per ogni progetto, un file host per ciascun sottodominio e blocchi della directory virtuale nella configurazione di Apache . Quindi
project1.localhost va in / Library / WebServer / Documents / Project1
project2.localhost va in / Library / WebServer / Documents / Project2
ecc ...
Tuttavia, questo metodo in realtà non " isolare " le app web. Ad esempio, se includo uno script in questo modo:
<?php
include("/includes/include.php");
?>
Fa riferimento allo script dalla directory di base del mio computer. Quindi accede a
C: /includes/include.php
C'è un modo per me di farne riferimento
C: /Library/WebServer/Documents/Project2/includes/include.php
Fondamentalmente, rendilo in modo che non sia a conoscenza di nulla al di fuori della propria directory. Inoltre, c'è un modo per usare php.ini anche per sottodominio?
Soluzione
Credo che sia possibile impostare un php.ini per host virtuale
<VirtualHost *:80>
...
PHPINIDir /full/path/to/php/ini/
</VirtualHost>
in questo modo puoi personalizzare open_basedir e altri
Altri suggerimenti
Puoi limitare la capacità degli script di vedere qualsiasi cosa sopra un albero di cartelle specifico aggiungendo open_basedir direttiva un blocco di cartelle nel file httpd.conf. Dovrebbe apparire come:
< DIRECTORY / full / path / to / folder / contenente / script / >
php_admin_value open_basedir " / full / path / to / top / folder / of / desiderata / tree / "
lt &; / DIRECTORY gt &;
Una cosa: se non finisci il percorso con un / allora è una corrispondenza jolly. In altre parole, & Quot; / var / etc / my & Quot; corrisponderà a " / var / etc / myFolder " così come " / var / etc / myMothersFolder " ;, mentre " / var / etc / my / " corrisponderà solo al nome esatto della cartella.
Per quanto riguarda l'isolamento delle applicazioni ~ è questo per quanto riguarda proteggere gli script PHP in modo che non possano accedere ad altri? Si prega di elaborare -
Riguardo a php.ini - Non sono a conoscenza di alcun modo per usare un php.ini specifico per directory, ma potresti certamente creare una pagina di inclusione php con un mucchio di righe ini_set (), forse qualcosa del genere ..
<?php
// in your header or along top of all php modules in your pap
require_once ( '/path/to/includes/ini_set.php' );
// ...
?>
e lo 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 );
?>
Se sei interessato a saperne di più sulla funzione ini_set (), ecco la pagina della documentazione su php.net: http://us3.php.net/ini_set
Spero che questo sia stato in qualche modo utile ~
Il modo migliore per farlo è usare PHP tramite FCGI (mod_fcgid). In questo modo puoi eseguire PHP usando un utente diverso e un php.ini diverso per vHost.
Ecco un esempio di come configurare una tale configurazione su Ubuntu: http://www.howtoforge.com/how-to-set-up-apache2-with-mod_fcgid-and-php5-on-ubuntu-8.10
Se si desidera utilizzare il nome percorso completo, è possibile utilizzare quello:
<?php
include dirname( __FILE__ ) . '/includes/include.php';
?>
Prova un percorso relativo! Mi piace:
<?php
include("./includes/include.php");
?>
o
<?php
include("includes/include.php");
?>