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.

Las directivas de Configuración que controlan el Modo Seguro son:
Directiva Valor por Omisión
safe_mode Off
safe_mode_gid 0
safe_mode_include_dir “”
safe_mode_exec_dir 1
open_basedir “”
safe_mode_allowed_env_vars PHP_
safe_mode_protected_env_vars LD_LIBRARY_PATH
disable_functions “”


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:

-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

Corriendo este script.php <?php
readfile
('/etc/passwd');
?>
resulta in este error cuando Modo Seguro está habilitado:

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, 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):

<Directory /docroot> php_admin_value open_basedir /docroot </Directory>

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

Warning: open_basedir restriction in effect. File is in wrong directory in /docroot/script.php on line 2

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:

disable_functions readfile,system

Entonces obtenemos esta salida:

Warning: readfile() has been disabled for security reasons in /docroot/script.php on line 2

Funciones restringidas/inhabilitadas por Modo Seguro

Función Limitaciones
dbmopen() Comprueba que los archivos/directorios que va a utilizar, tengan la misma UID que el script que está siendo ejecutado.
dbase_open() Comprueba que los archivos/directorios que va a utilizar, tengan la misma UID que el script que está siendo ejecutado.
filepro() Comprueba que los archivos/directorios que va a utilizar, tengan la misma UID que el script que está siendo ejecutado.
filepro_rowcount() Comprueba que los archivos/directorios que va a utilizar, tengan la misma UID que el script que está siendo ejecutado.
filepro_retrieve() Comprueba que los archivos/directorios que va a utilizar, tengan 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() Comprueba que los archivos/directorios que va a utilizar, tengan la misma UID que el script que está siendo ejecutado.
posix_mkfifo() Comprueba si el directorio que va a utilizar, tiene 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() Comprueba que los archivos/directorios que va a utilizar, tengan la misma UID que el script que está siendo ejecutado.
chdir() Comprueba si el directorio que va a utilizar, tiene la misma UID que el script que está siendo ejecutado.
dl() Esta función no está habilitada en safe-mode (modo-seguro)
backtick operator Esta función no está habilitada en safe-mode (modo-seguro)
shell_exec() (equivalencia funcional de backticks) Esta función no está habilitada 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() Comprueba si el directorio que va a utilizar, tiene la misma UID que el script que está siendo ejecutado.
rmdir() Comprueba que los archivos/directorios que va a utilizar, tengan la misma UID que el script que está siendo ejecutado.
rename() Comprueba que los archivos/directorios que va a utilizar, tengan la misma UID que el script que está siendo ejecutado. Comprueba si el directorio que va a utilizar, tiene la misma UID que el script que está siendo ejecutado.
unlink() Comprueba que los archivos/directorios que va a utilizar, tengan la misma UID que el script que está siendo ejecutado. Comprueba si el directorio que va a utilizar, tiene la misma UID que el script que está siendo ejecutado.
copy() Comprueba que los archivos/directorios que va a utilizar, tengan la misma UID que el script que está siendo ejecutado. Comprueba si el directorio que va a utilizar, tiene la misma UID que el script que está siendo ejecutado. (en source y target)
chgrp() Comprueba que los archivos/directorios que va a utilizar, tengan la misma UID que el script que está siendo ejecutado.
chown() Comprueba que los archivos/directorios que va a utilizar, tengan la misma UID que el script que está siendo ejecutado.
chmod() Comprueba que los archivos/directorios que va a utilizar, tengan la misma UID que el script que está siendo ejecutado. Además, Ud. no puede setear los bits de SUID, SGID y sticky
touch() Comprueba que los archivos/directorios que va a utilizar, tengan la misma UID que el script que está siendo ejecutado. Comprueba si el directorio que va a utilizar, tiene la misma UID que el script que está siendo ejecutado.
symlink() Comprueba que los archivos/directorios que va a utilizar, tengan la misma UID que el script que está siendo ejecutado. Comprueba si el directorio que va a utilizar, tiene la misma UID que el script que está siendo ejecutado. (Nota: sólo el target es comprobado)
link() Comprueba que los archivos/directorios que va a utilizar, tengan la misma UID que el script que está siendo ejecutado. Comprueba si el directorio que va a utilizar, tiene 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() Comprueba que los archivos/directorios que va a utilizar, tengan la misma UID que el script que está siendo ejecutado. Comprueba si el directorio que va a utilizar, tiene la misma UID que el script que está siendo ejecutado. (Nota: sólo afectado desde PHP 4.2.1)
parse_ini_file() Comprueba que los archivos/directorios que va a utilizar, tengan la misma UID que el script que está siendo ejecutado. Comprueba si el directorio que va a utilizar, tiene la misma UID que el script que está siendo ejecutado. (Nota: sólo afectado desde PHP 4.2.1)
Line lanza un servicio de taxis para competir contra Uber, #Line Line ha presentado hoy en Japón un nuevo servicio bautizado como Line Taxi, que se integra en su aplicación oficial y de momento solo estaba disponibl...
Internet sería la quinta potencia económica mundial en 2016 Ya nadie duda del crecimiento de la Red y su impacto en términos económicos. Y si eres de los que entiende de perspectivas económicas, vale que sepas ...
Según Cisco el tráfico de datos en Latinoamérica aumentará mas de 10 veces entre 2014 y 2019 El tráfico de datos en Latinoamérica crecerá diez veces entre 2014 y 2019 debido al aumento de usuarios y de uso de teléfonos inteligentes, informó ho...
Características de un sitio accesible Un sitio web accesible es: Transformable: La información y los servicios deben deben ser accesibles para todos y deben poder ser utilizados con...
Las acciones de Google superan los 1.000 dólares por primera vez Los buenos resultados de Google en el tercer trimestre han disparado la cotización de sus acciones en el Nasdaq. Las acciones del gigante de Mountain...
mysql ping mysql_query — Envía una consulta de MySQL Descripción resource mysql_query ( string $query ) mysql_query() envía una consulta (a la base de ...
Wikipedia recauda 20 millones de dólares Un año más, Jimmy Wales volvió a pedir ayuda para mantener la Wikipedia en pie (y gratuita). Y, un año más, la respuesta de los usuarios ha sido altam...
Cómo sincronizar Facebook o Twitter con Windows 8 Uno de los atractivos más grandes que encontraremos en la interfaz Metro es la aplicación que lleva por nombre “People”. Esta app permite sincronizar ...
Las ventas de tablets subirán un 8% en 2015 y las de PC un 1% El mercado de tabletas continúa perdiendo brío en 2015. Sus ventas se ralentizan, pese a que seguirán creciendo, según las previsiones avanzad...
El nuevo botón Seguir de Twitter Twitter ha activado el botón Follow o botón Seguir, en páginas web con el que cualquier usuario podrá hacerse seguidor de nuestra cuenta en Twitter de...
Que es el Modo Seguro (Safe Mode) en PHP
Tagged on: