Una punto interesante para hacer mas segura nuestra instalación de PHP es deshabilitar las funciones consideradas mas peligrosas en php siempre y cuando nuestras aplicaciones no las utilicen.

Esto es muy simple de hacer desde el archivo php.ini mediante la directiva disable_functions. El primer paso para realizar esto es localizar el archivo php.ini que esta usando nuestro php. Para esto usamos el siguiente comando logueado como root o si corresponde usando sudo (Ubuntu, Debian o similar)

find / -name php.ini

Supongamos en nuestro ejemplo que estuviera en /etc/php5/apache2/php.ini procedemos a editarlo con nuestro editor favorito por ejemplo.

gedit /etc/php5/apache2/php.ini

Una vez en el editor buscamos la directiva disable_functions y la reemplazamos por lo siguiente

disable_functions =”phpinfo”

En caso de no encontrar la directiva la agregamos al final del archivo. Entre las comillas colocaremos la lista separada por comas de las funciones que queremos deshabilitar. En este caso deshabilitamos phpinfo pero podría deshabilitarse cualquiera.

Si ejecutamos la función desde un script de php el mensaje de error es por demás claro así que fácilmente nos daremos cuenta si deshabilitamos algo demás

Warning: phpinfo() has been disabled for security reasons in /var/www/index.php on line 2

Encontramos en internet listas de funciones mas “conservadoras

disable_functions =”apache_child_terminate, apache_setenv, define_syslog_variables, escapeshellarg, escapeshellcmd, eval, exec, fp, fput, ftp_connect, ftp_exec, ftp_get, ftp_login, ftp_nb_fput, ftp_put, ftp_raw, ftp_rawlist, highlight_file, ini_alter, ini_get_all, ini_restore, inject_code, mysql_pconnect, openlog, passthru, php_uname, phpAds_remoteInfo, phpAds_XmlRpc, phpAds_xmlrpcDecode, phpAds_xmlrpcEncode, popen, posix_getpwuid, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, posix_setuid, posix_uname, proc_close, proc_get_status, proc_nice, proc_open, proc_terminate, shell_exec, syslog, system, xmlrpc_entity_decode”

o mas “arriesgadas

disable_functions =”system, passthru, escapeshellarg, escapeshellcmd, proc_close,proc_open, ini_alter, popen, show_source, pcntl_exec”

pero tendremos que analizar bien en cada caso cuales decidimos deshabilitar. No obstante es una practica muy recomendable ya que las funciones mas peligrosas son las que casi nunca se usan.

disable_functions ="system,passthru,escapeshellarg,escapeshellcmd,proc_close,proc_open,ini_alter,popen,show_source,pcntl_exec"