Desactivar funciones PHP

  • Por
  • 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.

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

web

06/11/2009
SOBRE FUNCION
esta funcion esta mal escrita "sacndir" ? deberia ser scandir

midesweb

23/6/2010
Función scandir!
Hola,
Efectivamente, es un error tipográfico, quizás ocasionado por el corrector del Word!!!
Ya no trabajo más con Word del Office, así que espero que no me pasen cosas como estas, y es que el Word tiene vida y decisión propia. ;)

En resumen: La función de PHP que quería desactivar es scandir.

Muchas gracias por el comentario y por ayudarnos a mantener el sitio!

Carlos Andrés Restrepo

16/8/2012
symlink no debe estar habilitada en un servidor compartido
es muy cierto en especial la función de symlink es muy grave tenerla habilitada en un servidor compartido dado que los script kiddies siempre tarta de subir webshell y molestar los sitios desde otras cuentas
by 4ndr3wtw0

robert10

15/1/2013
Duda sobre las funciones php desabilitadas
Bueno sobre este tema me surge una duda en mi caso en el servidor que utilizo esta deshabilitado la función shell_exec () entiendo por cuestiones de seguridad, pero en algunas ocasiones no puedo ejecutar ciertos scrip, mi comunique con soporte de la empresa que me provee del hosting y me dijo que no pueden habilitar esta opción, mi pregunta es si es posible que yo habilite esta opción en mi cuenta de hosting únicamente, había una función para habilitarlo únicamente en cuenta de hosting por ejemplo crear un archivo php.ini o algún archivo similar, si alguien me pueda explicar si lo puedo habilitar esta función únicamente en mi servidor de hosting.

p3p3

13/12/2013
recomiendo también quitar phpinfo
No es precisamente peligrosa en si, pero muchos programadores "descuidados" lo dejan en el servidor y cualquiera con un simple escaneo lo encuentra y consigue información detallada del servidor.

YO suelo bloquear todo esto:
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source,phpinfo,openlog,ftp_exec,posix_getpwuid,posix_kill,posix_mkfifo,posix_setpgid,posix_setsid,posix_setuid,

UsuarioQueInvestiga

27/4/2016
Bloquen funciones innecesarias
escapeshellarg — Escapar una cadena a ser usada como argumento del intérprete de comandos
escapeshellcmd — Escapar meta-caracteres del intérprete de comandos
curl_exec — Establece una sesión cURL (Si no se quiere usar curl, deshabilitar la extensión)
curl_multi_exec — Ejecuta las sub-conexiones del recurso cURL actual
php_uname — Devuelve información sobre el sistema operativo en que se está ejecutando PHP (Es útil como programador, para ver si es compatible un script)