Capítulo 22. Modo Seguro (Safe Mode)

Tabla de contenidos
Funciones restringidas/inhabilitadas por Modo Seguro

El Modo Seguro de PHP es un intento para resolver el problema de la seguridad en un servidor compartido . Tratar de resolver este problema al nivel de PHP es arquitectónicamente incorrecto , pero ya que las alternativas en un servidor web y a niveles de sistemas operativos no son tan realistas , mucha gente , especialmente la de proveedores de Internet ( ISP ) , usa el Modo Seguro por ahora .

Tabla 22-1 . Las directivas de Configuración que controlan el Modo Seguro son :

Directiva Valor por Omisión
Off
0
1


Cuando safe_mode está en On , el PHP verifica si el dueño del script actual coincide con el dueño del fichero a ser operado por una función de fichero . Por ejemplo :




Corriendo este script.php



resulta in este error cuando Modo Seguro está habilitado:













Sin embargo , pueden haber ambientes donde una estricta verificación del UID no es apropiada , y una relajada verificación del GID es suficiente . Esto es soportado por medio del switch safe_mode_gid . Seteándolo a On hace la verificación relajada GID , seteándolo a Off ( el valor por omisión ) hace la verificación del UID .

Si en vez del safe_mode , Ud . setea un directorio open_basedir , entonces todas las operaciones de fichero estarán limitadas a los ficheros bajo ese directorio especificado . Por ejemplo ( ejemplo de httpd.conf de Apache ) :




Si Ud. corre el mismo script.php con este seteo open_basedir , entonces este es el resultado:









Ud . también puede inhabilitar funciones individuales . Note que la directiva disable_functions no puede ser usada fuera del fichero php.ini lo que significa que Ud . no puede inhabilitar funciones en los principios per-virtualhost o per-directory en su fichero httpd.conf . Si agregamos esto a nuestro fichero php.ini :




Entonces obtenemos esta salida:





Funciones restringidas/inhabilitadas por Modo Seguro

Esta es una lista probablemente incompleta y posiblemente incorrecta de las funciones limitadas por safe mode .

Tabla 22-2 . Funciones limitadas por Modo Seguro

Función Limitaciones
dbmopen( )

Nota : Cuando safe-mode ( modo-seguro ) está activado , PHP comprueba si el fichero(s ) / directorios que vas a utilizar , tienen la misma UID que el script que está siendo ejecutado .

dbase_open( )

Nota : Cuando safe-mode ( modo-seguro ) está activado , PHP comprueba si el fichero(s ) / directorios que vas a utilizar , tienen la misma UID que el script que está siendo ejecutado .

filepro( )

Nota : Cuando safe-mode ( modo-seguro ) está activado , PHP comprueba si el fichero(s ) / directorios que vas a utilizar , tienen la misma UID que el script que está siendo ejecutado .

filepro_rowcount( )

Nota : Cuando safe-mode ( modo-seguro ) está activado , PHP comprueba si el fichero(s ) / directorios que vas a utilizar , tienen la misma UID que el script que está siendo ejecutado .

filepro_retrieve( )

Nota : Cuando safe-mode ( modo-seguro ) está activado , PHP comprueba si el fichero(s ) / directorios que vas a utilizar , tienen la misma UID que el script que está siendo ejecutado .

ifx_*( ) restricciones sql_safe_mode , ( != safe mode )
ingres_*( ) restricciones sql_safe_mode , ( != safe mode )
mysql_*( ) restricciones sql_safe_mode , ( != safe mode )
pg_loimport( )

Nota : Cuando safe-mode ( modo-seguro ) está activado , PHP comprueba si el fichero(s ) / directorios que vas a utilizar , tienen la misma UID que el script que está siendo ejecutado .

posix_mkfifo( )

Nota : Cuando safe-mode ( modo-seguro ) está activado , PHP comprueba si los directorios que vas a utilizar , tienen la misma UID que el script que está siendo ejecutado .

putenv( ) Obecede las ini-directivas safe_mode_protected_env_vars y safe_mode_allowed_env_vars . Vea también la documentación de putenv( )
move_uploaded_file( )

Nota : Cuando safe-mode ( modo-seguro ) está activado , PHP comprueba si el fichero(s ) / directorios que vas a utilizar , tienen la misma UID que el script que está siendo ejecutado .

chdir( )

Nota : Cuando safe-mode ( modo-seguro ) está activado , PHP comprueba si los directorios que vas a utilizar , tienen la misma UID que el script que está siendo ejecutado .

dl( ) Esta función no está activada en safe-mode ( modo-seguro )
backtick operator Esta función no está activada en safe-mode ( modo-seguro )
shell_exec( ) (equivalencia funcional de backticks ) Esta función no está activada en safe-mode ( modo-seguro )
exec( ) Ud . puede correr sólo ejecutables dentro del safe_mode_exec_dir . Por razones prácticas , no está actualmente permitido tener componentes . . en la ruta del fichero ejecutable .
system( ) Ud . puede correr sólo ejecutatables dentro del safe_mode_exec_dir . Por razones prácticas , no está actualmente permitido tener componentes . . en la ruta del fichero ejecutable .
passthru( ) Ud . puede correr sólo ejecutatables dentro del safe_mode_exec_dir . Por razones prácticas , no está actualmente permitido tener componentes . . en la ruta del fichero ejecutable .
popen( ) Ud . puede correr sólo ejecutatables dentro del safe_mode_exec_dir . Por razones prácticas , no está actualmente permitido tener componentes . . en la ruta del fichero ejecutable .
mkdir( )

Nota : Cuando safe-mode ( modo-seguro ) está activado , PHP comprueba si los directorios que vas a utilizar , tienen la misma UID que el script que está siendo ejecutado .

rmdir( )

Nota : Cuando safe-mode ( modo-seguro ) está activado , PHP comprueba si el fichero(s ) / directorios que vas a utilizar , tienen la misma UID que el script que está siendo ejecutado .

rename( )

Nota : Cuando safe-mode ( modo-seguro ) está activado , PHP comprueba si el fichero(s ) / directorios que vas a utilizar , tienen la misma UID que el script que está siendo ejecutado .

Nota : Cuando safe-mode ( modo-seguro ) está activado , PHP comprueba si los directorios que vas a utilizar , tienen la misma UID que el script que está siendo ejecutado .

unlink( )

Nota : Cuando safe-mode ( modo-seguro ) está activado , PHP comprueba si el fichero(s ) / directorios que vas a utilizar , tienen la misma UID que el script que está siendo ejecutado .

Nota : Cuando safe-mode ( modo-seguro ) está activado , PHP comprueba si los directorios que vas a utilizar , tienen la misma UID que el script que está siendo ejecutado .

copy( )

Nota : Cuando safe-mode ( modo-seguro ) está activado , PHP comprueba si el fichero(s ) / directorios que vas a utilizar , tienen la misma UID que el script que está siendo ejecutado .

Nota : Cuando safe-mode ( modo-seguro ) está activado , PHP comprueba si los directorios que vas a utilizar , tienen la misma UID que el script que está siendo ejecutado .

(en source y target )
chgrp( )

Nota : Cuando safe-mode ( modo-seguro ) está activado , PHP comprueba si el fichero(s ) / directorios que vas a utilizar , tienen la misma UID que el script que está siendo ejecutado .

chown( )

Nota : Cuando safe-mode ( modo-seguro ) está activado , PHP comprueba si el fichero(s ) / directorios que vas a utilizar , tienen la misma UID que el script que está siendo ejecutado .

chmod( )

Nota : Cuando safe-mode ( modo-seguro ) está activado , PHP comprueba si el fichero(s ) / directorios que vas a utilizar , tienen la misma UID que el script que está siendo ejecutado .

Además, Ud. no puede setear los bits de SUID, SGID y sticky
touch( )

Nota : Cuando safe-mode ( modo-seguro ) está activado , PHP comprueba si el fichero(s ) / directorios que vas a utilizar , tienen la misma UID que el script que está siendo ejecutado .

Nota : Cuando safe-mode ( modo-seguro ) está activado , PHP comprueba si los directorios que vas a utilizar , tienen la misma UID que el script que está siendo ejecutado .

symlink( )

Nota : Cuando safe-mode ( modo-seguro ) está activado , PHP comprueba si el fichero(s ) / directorios que vas a utilizar , tienen la misma UID que el script que está siendo ejecutado .

Nota : Cuando safe-mode ( modo-seguro ) está activado , PHP comprueba si los directorios que vas a utilizar , tienen la misma UID que el script que está siendo ejecutado .

(Nota: sólo el target es comprobado)
link( )

Nota : Cuando safe-mode ( modo-seguro ) está activado , PHP comprueba si el fichero(s ) / directorios que vas a utilizar , tienen la misma UID que el script que está siendo ejecutado .

Nota : Cuando safe-mode ( modo-seguro ) está activado , PHP comprueba si los directorios que vas a utilizar , tienen la misma UID que el script que está siendo ejecutado .

(Nota: sólo the target es comprobado)
getallheaders( ) En Modo Seguro , las cabeceras que empiezan con ' authorization ' (insensitivo al tipo de letra ) no serán retornadas . Advertencia : esto está roto por la implementación de aol-server de getallheaders( ) !
header( ) En Modo Seguro , el UID del script está agregado a la parte realm de la cabecera WWW-Authenticate si Ud . setea esta cabecera ( usado por HTTP Authentication ) .
highlight_file( ) , show_source( )

Nota : Cuando safe-mode ( modo-seguro ) está activado , PHP comprueba si el fichero(s ) / directorios que vas a utilizar , tienen la misma UID que el script que está siendo ejecutado .

Nota : Cuando safe-mode ( modo-seguro ) está activado , PHP comprueba si los directorios que vas a utilizar , tienen la misma UID que el script que está siendo ejecutado .

(Nota: sólo afectado desde PHP 4.2.1)
parse_ini_file( )

Nota : Cuando safe-mode ( modo-seguro ) está activado , PHP comprueba si el fichero(s ) / directorios que vas a utilizar , tienen la misma UID que el script que está siendo ejecutado .

Nota : Cuando safe-mode ( modo-seguro ) está activado , PHP comprueba si los directorios que vas a utilizar , tienen la misma UID que el script que está siendo ejecutado .

(Nota: sólo afectado desde PHP 4.2.1)
Cualquier función que usa php4 / main / fopen_wrappers.c ? ?