Segurança e SSL

Restringir funções do PHP sem avariar a aplicação

Revisto a 2 min de leitura segurança web PHP

O PHP inclui funções que permitem executar processos, abrir ligações ou interagir com o sistema. Algumas aplicações precisam delas e outras não.

disable_functions pode reduzir o que um código PHP já em execução é capaz de fazer, mas não corrige uma vulnerabilidade nem substitui as atualizações, o isolamento, o privilégio mínimo ou a investigação de uma intrusão.

Em cPanel > Select PHP Version > Options, procure disable_functions, se o seletor o permitir. Confirme a versão e o âmbito a que se aplica; vários sites podem partilhar essa configuração.

Não apague a configuração existente nem copie uma lista genérica. Anote o seu valor atual e desative apenas as funções que confirmou que a aplicação não precisa. Como ponto de partida para uma aplicação que não executa processos do sistema, pode avaliar individualmente funções como:

exec,passthru,proc_open,shell_exec,system

Não inclua eval: é uma construção da linguagem e disable_functions não a consegue desativar. Também não desative funções de rede, ficheiros, processos ou registo sem rever antes as dependências e as tarefas agendadas da aplicação.

Depois de cada alteração, verifique o funcionamento completo dos sites, das tarefas agendadas e dos processos de manutenção. Se uma função for necessária, volte a ativá-la e aplique um controlo adequado noutra camada.

Teste separadamente as tarefas web e os comandos de consola, que podem usar configurações PHP diferentes. Não tente alterar esta diretiva através de ini_set() dentro da aplicação: o PHP trata-a como uma configuração do sistema.

A partir do PHP 8, uma função desativada deixa de estar definida e o código do utilizador pode definir outra com esse nome. Por isso, não deve ser interpretada como uma barreira de isolamento suficiente. A documentação do PHP explica os seus limites.

Também lhe pode ser útil

Algo não bate certo ou mudou? Diga-nos e revemos.