Nombre | Por defecto | Cambiable | Historial de cambios |
---|---|---|---|
safe_mode | "0" | PHP_INI_SYSTEM | Eliminada en PHP 5.4.0. |
safe_mode_gid | "0" | PHP_INI_SYSTEM | Eliminada en PHP 5.4.0. |
safe_mode_include_dir | NULL | PHP_INI_SYSTEM | Eliminada en PHP 5.4.0. |
safe_mode_exec_dir | "" | PHP_INI_SYSTEM | Eliminada en PHP 5.4.0. |
safe_mode_allowed_env_vars | "PHP_" | PHP_INI_SYSTEM | Eliminada en PHP 5.4.0. |
safe_mode_protected_env_vars | "LD_LIBRARY_PATH" | PHP_INI_SYSTEM | Eliminada en PHP 5.4.0. |
He aquí una breve explicación de las directivas de configuración.
safe_mode
boolean
Indica si habilitar el modo seguro de PHP. Si PHP se compila con --enable-safe-mode, el valor predeterminado será On; si no, será Off.
Esta característica ha sido declarada OBSOLETA desde PHP 5.3.0 y ELIMINADA a partir de PHP 5.4.0.
safe_mode_gid
boolean
Por defecto, el modo seguro comprueba la comparación de un UID al
abrir ficheros. Si se quiere suavizar esta comparación a un GID,
se ha de activar safe_mode_gid.
Indica si usar la comprobación de UID (FALSE
) o de
GID (TRUE
) al acceder a un
fichero.
safe_mode_include_dir
string
Se omiten las comprobaciones de UID/GID cuando se incluyen ficheros de este directorio y sus subdirectorios (el directorio debe estar también en include_path o debe incluir la ruta completa).
Esta directiva puede tomar una ruta separada por dos puntos (punto y coma en Windows) de forma similar a la directiva include_path, en lugar de solamente un único directorio. Realmente, la restricción especificada es un prefijo, no un nombre de directorio. Esto significa que "safe_mode_include_dir = /dir/incl" también permite el acceso a "/dir/include" y "/dir/incls" si existen. Cuando solamente se quiera restringir el acceso al directorio especificado, se ha de finalizarlo con una barra. Por ejemplo: "safe_mode_include_dir = /dir/incl/". Si el valor de esta directiva está vacío, no se podrán incluir ficheros con UID/GID diferentes.safe_mode_exec_dir
string
Si PHP se emplea en modo seguro, system() y las demás funciones que ejecuten programas del sistema rechazarán iniciar programas que no estén en este directorio. Se ha de emplear / como separador de directorios en todos los entornos, incluyendo Windows.
safe_mode_allowed_env_vars
string
Establecer ciertas variables de entorno podría crear una brecha potencial de seguridad. Esta directiva contiene una lista de prefijos separados por comas. En el modo seguro, el usuario podrá solamente modificar las variables de entorno cuyos nombre comiencen con los prefijos proporcionados aquí. Por omisión, los usuarios solamente podrán establecer variables de entorno que comiencen con PHP_ (p.ej., PHP_FOO=BAR).
Nota:
Si esta directiva está vacía, PHP permitirá al usuario modificar CUALQUIER variable de entorno.
safe_mode_protected_env_vars
string
Esta directiva contiene una lista de variables de entorno separadas por comas que no podrá cambiar el un usuario que utilice putenv(). Estas variables estarán protegidas incluso si safe_mode_allowed_env_vars está establecida para permitir cambiarlas.
Véase también: open_basedir, disable_functions, disable_classes, register_globals, display_errors, y log_errors.
Cuando safe_mode está activado, PHP comprueba si el propietario del script en uso coincide con el del fichero sobre el que se va a operar mediante una función de ficheros o su directorio. Por ejemplo:
-rw-rw-r-- 1 rasmus rasmus 33 Jul 1 19:20 script.php -rw-r--r-- 1 root root 1116 May 26 18:01 /etc/passwd
<?php
readfile('/etc/passwd');
?>
Warning: SAFE MODE Restriction in effect. The script whose uid is 500 is not allowed to access /etc/passwd owned by uid 0 in /docroot/script.php on line 2
Sin embargo, podrían haber entornos donde una comprobación estricta del UID no sea apropiada, siendo una comprobación del GID suficiente. El soporte para esto se realiza a través de safe_mode_gid. Al establecerlo a On se realiza la comprobación del GID, y al establecerlo a Off (lo predeterminado) se realiza la del UID.
Si en lugar de safe_mode se establece un directorio de open_basedir, todas las operaciones de ficheros estarán limitadas a ficheros que estén bajo el directorio especificado. Por ejemplo (ejemplo de httpd.conf de Apache):
<Directory /docroot> php_admin_value open_basedir /docroot </Directory>
Warning: open_basedir restriction in effect. File is in wrong directory in /docroot/script.php on line 2
También se pueden deshabilitar funciones individuales. Observe que la directiva disable_functions no se puede utilizar fuera del fichero php.ini, lo que significa que no se pueden deshabilitar funciones basándose en un host virtual o directorio en el fichero httpd.conf. Si se añade lo siguiente al fichero php.ini:
disable_functions = readfile,system
Warning: readfile() has been disabled for security reasons in /docroot/script.php on line 2
Por supuesto, estas restricciones de PHP no son válidas para binarios en ejecución.