Deshabilitar funciones peligrosas de PHP en el servidor web
Realizar prácticas de hardening para evitar hackeos indiscriminados de hasta un niño es algo crucial en estás épocas por lo cual debemos eliminar un grupo de funciones de PHP que suelen ser muy peligrosas en las manos equivocadas y son las siguientes:
apache_child_terminate apache_get_modules apache_note apache_setenv define_syslog_variables disk_free_space disk_total_space diskfreespace dl escapeshellarg escapeshellcmd exec extract get_cfg_var get_current_user getcwd getenv getlastmo getmygid getmyinode getmypid getmyuid ini_restore ini_set passthru pcntl_alarm pcntl_exec pcntl_fork pcntl_get_last_error pcntl_getpriority pcntl_setpriority pcntl_signal pcntl_signal_dispatch pcntl_sigprocmask pcntl_sigtimedwait pcntl_sigwaitinfo pcntl_strerrorp pcntl_wait pcntl_waitpid pcntl_wexitstatus pcntl_wifexited pcntl_wifsignaled pcntl_wifstopped pcntl_wstopsig pcntl_wtermsig php_uname phpinfo popen posix_getlogin posix_getpwuid posix_kill posix_mkfifo posix_setpgid posix_setsid posix_setuid posix_ttyname posix_uname posixc proc_close proc_get_status proc_nice proc_open proc_terminate ps_aux putenv readlink runkit_function_rename shell_exec show_source symlink syslog system
Para deshabilitar estás funciones manualmente debemos editar el archivo php.ini de nuestro PHP, en la directiva de PHP disable_functions:
; This directive allows you to disable certain functions for security reasons. ; It receives a comma-delimited list of function names. This directive is ; *NOT* affected by whether Safe Mode is turned On or Off. ; http://php.net/disable-functions disable_functions="apache_child_terminate,apache_get_modules,apache_note,apache_setenv,define_syslog_variables,disk_free_space,disk_total_space,diskfreespace,dl,escapeshellarg,escapeshellcmd,exec,extract,get_cfg_var,get_current_user,getcwd,getenv,getlastmo,getmygid,getmyinode,getmypid,getmyuid,ini_restore,ini_set,passthru,pcntl_alarm,pcntl_exec,pcntl_fork,pcntl_get_last_error,pcntl_getpriority,pcntl_setpriority,pcntl_signal,pcntl_signal_dispatch,pcntl_sigprocmask,pcntl_sigtimedwait,pcntl_sigwaitinfo,pcntl_strerrorp,pcntl_wait,pcntl_waitpid,pcntl_wexitstatus,pcntl_wifexited,pcntl_wifsignaled,pcntl_wifstopped,pcntl_wstopsig,pcntl_wtermsig,php_uname,phpinfo,popen,posix_getlogin,posix_getpwuid,posix_kill,posix_mkfifo,posix_setpgid,posix_setsid,posix_setuid,posix_ttyname,posix_uname,posixc,proc_close,proc_get_status,proc_nice,proc_open,proc_terminate,ps_aux,putenv,readlink,runkit_function_rename,shell_exec,show_source,symlink,syslog,system"
Es conveniente deshabilitar la gran mayoría de estás funciones en todas las versiones de PHP que tengamos instaladas, así aumentamos una capa extra de seguridad.
Comments (2)
Estimado Carlos, buen apunte.
Sería bueno discriminar que funciones son necesarias si se utilizan por ej. gestores de contenidos, como los populares WordPress, Joomla, Drupal, etc. que son basados en PHP.
Darío, muchas gracias. Lo tendré en cuenta para otra publicación. Saludos.