Aquí podría ser tu PUBLICIDAD


¿Cómo limito las aplicaciones de PHP a sus propios directorios y su propio php.ini?

votos
6

Estoy ejecutando varias aplicaciones PHP en mi Mac, ejecutando OS X 10.5.6, Apache 2, PHP 5. Tengo la configuración de subdominios para cada proyecto, las entradas de un archivo de host para cada subdominio y los bloques de Directorio virtual en la configuración de Apache. Asi que

project1.localhost va a / Library / WebServer / Documents / Project1
project2.localhost va a / Library / WebServer / Documents / Project2
etc ...

Sin embargo, este método realmente no aísla las aplicaciones web. Por ejemplo, si incluyo un script como ese:

<?php
include(/includes/include.php);
?>

Hace referencia a la secuencia de comandos desde el directorio base de mi computadora. Entonces accede a
C: /includes/include.php

¿Hay alguna manera para que lo haga referencia
C: /Library/WebServer/Documents/Project2/includes/include.php

Básicamente, haz que no tenga conocimiento de nada fuera de su propio directorio. Además, ¿hay alguna manera de usar php.ini también por subdominio?

Publicado el 12/03/2009 a las 18:32
fuente por usuario John Bubriski
En otros idiomas...        العربية       

6 respuestas

votos
8

Creo que es posible establecer un php.ini por host virtual

<VirtualHost *:80>
    ...

    PHPINIDir /full/path/to/php/ini/

</VirtualHost>

De esta forma puedes personalizar open_basedir y otros

Respondida el 12/03/2009 a las 10:14
fuente por usuario J.C. Inacio


Aquí podría ser tu PUBLICIDAD


votos
4

Puede limitar la capacidad de una secuencia de comandos para ver cualquier elemento por encima de un árbol de carpetas específico añadiendo la directiva open_basedir a un bloque de carpeta en el archivo httpd.conf. Debería verse así:

<DIRECTORIO / completo / ruta / a / carpeta / que contiene / script />

php_admin_value open_basedir "/ full / path / to / top / folder / of / desired / tree /"

</ DIRECTORIO>

Una cosa: si no finalizas la ruta con a / entonces es una coincidencia de comodín. En otras palabras, "/ var / etc / my" coincidirá con "/ var / etc / myFolder" y "/ var / etc / myMothersFolder", mientras que "/ var / etc / my /" solo coincidirá con esa carpeta exacta nombre.

Respondida el 12/03/2009 a las 08:31
fuente por usuario user13414

votos
1

La mejor forma de hacerlo es usar PHP a través de FCGI (mod_fcgid). De esta forma puede ejecutar PHP usando un usuario diferente y un php.ini diferente por vHost.

Aquí hay un ejemplo de cómo configurar tal configuración en Ubuntu: http://www.howtoforge.com/how-to-set-up-apache2-with-mod_fcgid-and-php5-on-ubuntu-8.10

Respondida el 15/03/2009 a las 10:24
fuente por usuario maff

votos
1

En cuanto al aislamiento de la aplicación, ¿se trata de proteger los scripts PHP para que no puedan acceder a los demás? Por favor elabora -

En cuanto a php.ini: no conozco ninguna forma de usar un php.ini específico por directorio, pero ciertamente puedes crear una página de inclusión de php con un montón de líneas ini_set (), tal vez algo como esto ...

<?php
  // in your header or along top of all php modules in your pap
  require_once ( '/path/to/includes/ini_set.php' );

  // ...

?>

y el 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 está interesado en obtener más información acerca de la función ini_set (), aquí está la página de documentación en php.net: http://us3.php.net/ini_set

Espero que esto haya sido útil ~

Respondida el 12/03/2009 a las 10:05
fuente por usuario OneNerd

votos
0

Si desea usar el nombre de ruta completo, puede usar eso:

<?php
include  dirname( __FILE__ ) . '/includes/include.php';
?>

Posible solución para el archivo php.ini

Respondida el 12/03/2009 a las 08:29
fuente por usuario Luc M

votos
-1

¡Prueba una ruta relativa! Me gusta:

<?php
include("./includes/include.php");
?>

o

<?php
include("includes/include.php");
?>
Respondida el 12/03/2009 a las 07:00
fuente por usuario Martin K.