> Manuales > Taller de PHP

A través del archivo php.ini y la variable disable_functions, podemos bloquear el uso de ciertas funciones PHP que podrían poner en riesgo la seguridad del sistema.

PHP tiene múltiples funciones a disposición de los programadores en este lenguaje que hacen uso de los recursos del servidor, como puede ser el sistema de ficheros, la línea de comandos, ejecución de aplicaciones en el propio servidor, etc. Son sin duda funciones útiles y resulta de agradecer que el lenguaje las permita para casos de programación avanzada, pero lo cierto es que estas funciones no se utilizan en el desarrollo de la mayoría de páginas

Al estar disponibles estas funciones, cualquiera que pueda publicar scripts PHP en un servidor, tiene acceso a funcionalidades altamente críticas, que pueden comprometer la seguridad del sistema. Escribir y ejecutar cualquier comando en la shell o poner en marcha cualquier aplicación en el servidor supone un alto riesgo para dejar abierta esa posibilidad en una máquina.

PHP dispone de una directiva de configuración, que podemos activar a través del php.ini para deshabilitar aquellas funciones del lenguaje que puedan poner en riesgo la seguridad del sistema. La variable de configuración que estamos hablando es disable_functions, a la que asignamos separadas por comas las funciones que puedan ser peligrosas y que, si estamos seguros de no utilizar, es mejor que estén desactivadas.

Simplemente tenemos que localizar el php.ini de nuestro sistema, que se puede ver a través de la función phpinfo(), y editar la variable disable_functions, que estará probablemente sin ninguna función asignada.

disable_functions = dir,readdir,scandir,phpinfo,exec,proc_open

En realidad podemos poner tantas funciones como queramos, pero hay un grupo en concreto que podrían poner en riesgo el sistema claramente. Probablemente haya algunas que utilizas en tus aplicaciones web, en cuyo caso no las deberías desactivar. Aunque a la larga merece la pena pensar en cambiar la programación de tus páginas y utilizar otras funciones o métodos alternativos para hacer las cosas sin usarlas, de modo que se puedan desactivar en tu servidor.

Esta podría ser una lista de funciones que podrían crear algún tipo de riesgo:

phpinfo, dir, readdir, scandir, opendir, apache_child_terminate, apache_setenv, define_syslog_variables, escapeshellarg, escapeshellcmd, dl, eval, exec, set_time_limit, ftp_connect, ftp_exec, ftp_get, ftp_login, ftp_nb_fput, ftp_put, ftp_raw, ftp_rawlist, highlight_file, ini_alter, ini_set ini_get_all, ini_restore, mysql_pconnect, openlog, passthru, php_uname, popen, ocilogon, posix_getpwuid, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, posix_uname, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, shell_exec, system, syslog, xmlrpc_entity_decode

Puede haber alguna función que falte en esta lista, así como puede ver alguna otra que tampoco suponga mucho riesgo y esté apuntada, pero es un buen punto de entrada para evitar problemas más serios.

Una vez hayamos actualizado la lista de funciones, recordar de reiniciar el Apache para que los cambios tengan efecto.

En el momento que estén desactivadas, si cualquier persona las utiliza recibirá un mensaje como este:

Warning: phpinfo() has been disabled for security reasons in C:wampwwwinfophp.php on line 4

Desactivar las funciones de PHP más críticas es una práctica extremadamente aconsejable en el caso que varias personas puedan utilizar un mismo servidor compartido.

Miguel Angel Alvarez

Fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Com...

Manual