Central de Ajuda

Guia da Central de Ajuda

disable_functions no PHP: como restringir funções perigosas com segurança

A diretiva disable_functions impede que funções PHP específicas sejam chamadas. Ela pode reduzir algumas formas de abuso após uma invasão, mas não é uma fronteira completa de segurança: não corrige código vulnerável, não controla outros processos e pode quebrar aplicações, filas, backups e bibliotecas.

Antes de bloquear funções

  • atualize PHP, sistema, CMS, plugins e dependências;
  • remova extensões e aplicações sem uso;
  • use usuários, permissões e isolamento adequados;
  • restrinja acesso administrativo e segredos;
  • mantenha backup, WAF, antimalware e monitoramento;
  • levante quais funções a aplicação usa em produção e em tarefas agendadas.
Não copie uma lista enorme da internet. Funções como exec, shell_exec, system, proc_open e popen têm usos legítimos. Bloqueá-las pode interromper conversão de mídia, filas, Composer, Git, antivírus e rotinas de backup sem tornar um site vulnerável seguro.

Escopo da configuração

Em servidores com múltiplas versões PHP, cada versão e cada SAPI pode carregar arquivos diferentes. PHP-FPM do site, Apache e CLI não necessariamente usam a mesma configuração. Verifique:

php --ini
php -r "echo ini_get('disable_functions'), PHP_EOL;"
php-fpm -i | grep disable_functions

O último comando varia conforme a versão/pacote. Compare com uma página de diagnóstico protegida no domínio e remova-a depois.

Configurar no cPanel/WHM

Para um domínio, abra MultiPHP INI Editor, escolha o domínio e use o modo editor quando a diretiva estiver disponível:

disable_functions = exec,passthru,shell_exec,system

Essa é apenas uma ilustração, não uma recomendação universal. Em WHM, o administrador pode usar MultiPHP INI Editor para uma versão do EasyApache 4. Alterações globais afetam todas as contas nessa versão e exigem teste de compatibilidade.

Procedimento de mudança

  1. Registre a configuração atual e faça backup.
  2. Crie uma lista mínima baseada no risco e no uso real.
  3. Aplique primeiro em homologação ou em um único domínio.
  4. Recarregue o PHP-FPM quando o painel não fizer isso automaticamente.
  5. Teste páginas, login, upload, e-mail, cron, filas, relatórios e backups.
  6. Monitore logs por chamadas a funções desabilitadas.
  7. Documente exceções e mantenha um retorno rápido.

Limitações importantes

  • a lista só afeta funções internas do PHP configuradas;
  • um invasor pode explorar outras funções, extensões ou processos;
  • restrições de diretório como open_basedir também têm limitações e compatibilidade própria;
  • em hospedagem compartilhada, o provedor pode controlar a diretiva;
  • alterar php.ini do CLI não garante mudança no site.

Quando uma aplicação apresenta erro

Procure no log mensagens como “Call to undefined function” ou falhas ao iniciar processos. Identifique a função e a origem da chamada. Se o recurso é legítimo, remova apenas aquela função da lista ou isole a aplicação em ambiente adequado; não desative toda a proteção por tentativa.

Referências: disable_functions no manual do PHP e MultiPHP INI Editor no cPanel.

Recursos relacionados

Continue com materiais e serviços relacionados ao tema deste guia.

Este guia resolveu sua dúvida? Seu retorno ajuda a priorizar as próximas revisões.
Atendimento técnico

Não encontrou o resultado esperado?

Abra um chamado e envie a mensagem de erro completa, o domínio ou serviço afetado, o horário do teste e capturas de tela sem senhas.