Back-End

15 set, 2009

Desativando funções do PHP com php.ini

Publicidade

Através do arquivo php.ini e da variável disable_function, podemos bloquear o uso de certas funções PHP que poderiam colocar em risco a segurança do sistema.

O PHP é uma linguagem de programação que faz uso de recursos do
servidor e possui muitas funções à disposição dos programadores como
manipular o sistema de arquivos, linhas de comando, execução de
aplicações no próprio servidor, entre outras. Sem dúvida são funções
úteis que permitem programação avançada, lembrando que estas funções
não são utilizadas em todas as páginas desenvolvidas.

Ao estarem disponíveis estas funções, qualquer script colocado no
servidor tem acesso a essas funcionalidades, podendo assim comprometer
a segurança do sistema. Escrever e executar qualquer comando no shell
ou rodar uma aplicação no servidor pode trazer um alto risco à
segurança.

O PHP possui uma diretiva de configuração, que pode ser ativada através
do php.ini para desabilitar as funções que possam colocar em risco a
segurança do sistema. A variável de configuração de que estamos falando é
disable_functions, e declaramos as funções a serem desativadas
separando-as por vírgula.

Simplesmente temos que localizar o php.ini do nosso sistema, que pode
ser visto através da função phpinfo(), e editar a variável
disable_functions, que estará provavelmente sem nenhuma função
especificada.

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

Na realidade podemos colocar quantas funções quisermos, mas há um grupo
mais específico de funções que pode colocar o sistema claramente em
risco.

É provavel que existam algumas que utilizemos em nossas aplicações,
nesse caso não deveríamos desativá-las. Podemos pensar em trocar
algumas funções por outras ou por métodos alternativos para fazer as
funcionalidades sem utilizar funções que podem colocar o sistema em
risco, podendo então desativá-las.

Vejam abaixo algumas funções que podem oferecer risco à segurança do sistema:

  • phpinfo,
  • dir,
  • readdir,
  • sacndir,
  • 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

Pode haver alguma função faltando nessa lista, da mesma forma como haver
outra que não ofereça risco e que foi listada, mas é sempre bom ter um
ponto de partida para evitar problemas mais sérios.

Após atualizar a lista de funções, lembrem-se de reiniciar o Apache para que as mudanças tenham efeito.

Após desativar as funções, toda vez que uma delas for utilizada, o usuário receberá a seguinte mensagem:

Warning: phpinfo() has been disabled for security reasons in C:\wamp\www\infophp.php on line 4

Desativar as funções mais críticas do PHP é uma prática extremamente
aconselhável no caso de várias pessoas poderem utilizar um mesmo
servidor de modo compartilhado.

Até o próximo artigo!