Introdução
O PHP possui diversas funções que, se mal utilizadas, podem representar um risco para a segurança da aplicação. Funções que permitem a execução de comandos do sistema operacional ou manipulação direta de arquivos podem ser exploradas por atacantes para comprometer o servidor. Desativá-las no php.ini
é uma das formas mais eficazes de proteger a aplicação.
1. Identificando funções PHP perigosas
Algumas funções do PHP podem ser usadas para executar comandos no servidor, modificar arquivos ou até abrir conexões externas sem controle. As mais perigosas incluem:
exec()
shell_exec()
system()
passthru()
popen()
proc_open()
eval()
base64_decode()
(pode ser usada para ocultar código malicioso)
Se a aplicação não precisa dessas funções, é altamente recomendável desativá-las.
2. Desativando funções perigosas no php.ini
Abra o arquivo php.ini
e localize a diretiva disable_functions
. Adicione as funções que deseja bloquear:
disable_functions = exec, shell_exec, system, passthru, popen, proc_open, eval, base64_decode
Após essa configuração, reinicie o servidor para que as mudanças tenham efeito:
sudo systemctl restart apache2 # Para Apache
sudo systemctl restart nginx # Para Nginx
3. Verificando se as funções estão realmente desativadas
Podemos testar se as funções foram bloqueadas executando o seguinte código:
if (in_array('exec', explode(',', ini_get('disable_functions')))) {
echo 'A função exec() está desativada!';
} else {
echo 'A função exec() ainda está ativa!';
}
Se a configuração estiver correta, a função exec()
não será executada e retornará a mensagem de bloqueio.
4. Protegendo o php.ini contra modificações
Um atacante pode tentar reverter as configurações de segurança alterando o php.ini
. Para evitar isso, podemos definir permissões restritas para o arquivo:
sudo chmod 444 /etc/php/8.1/apache2/php.ini
Isso impede que usuários não autorizados alterem as configurações do PHP.
5. Monitorando tentativas de execução de funções bloqueadas
Manter logs das tentativas de uso de funções desativadas pode ajudar a identificar atividades suspeitas. Podemos configurar um log customizado para registrar essas tentativas:
function tentarExecutar($comando) {
error_log("Tentativa de executar: $comando", 3, '/var/log/php_security.log');
die("Operação não permitida!");
}
if (function_exists('exec')) {
tentarExecutar('exec');
}
Isso impede a execução e registra tentativas suspeitas no log /var/log/php_security.log
.
Conclusão
Desativar funções perigosas no php.ini
é uma medida essencial para evitar que aplicações PHP sejam exploradas para execução remota de código ou comprometimento do servidor. Ao bloquear funções inseguras, restringir permissões do php.ini
e monitorar tentativas de exploração, podemos reforçar significativamente a segurança da aplicação.
Por que desativar funções perigosas no PHP aumenta a segurança?
O PHP é uma linguagem poderosa, mas também pode ser um alvo fácil para atacantes se funções perigosas estiverem ativas. Muitas brechas de segurança ocorrem porque aplicações permitem a execução de comandos no servidor sem as devidas restrições.
A melhor forma de mitigar esse risco é desativar funções como exec()
, system()
e popen()
no php.ini
, garantindo que scripts maliciosos não possam explorá-las. Além disso, manter logs de tentativas de uso dessas funções ajuda a identificar atividades suspeitas antes que se tornem um problema.
Com a implementação dessas práticas, evitamos um dos tipos de ataque mais comuns em aplicações PHP, reduzindo significativamente as chances de exploração de vulnerabilidades no servidor.
Algumas aplicações:
- Evitar que atacantes executem comandos no sistema operacional via PHP.
- Reduzir o risco de exploração remota e injeção de código malicioso.
- Proteger o servidor contra ataques automatizados que exploram funções perigosas.
- Reforçar a segurança de ambientes compartilhados onde múltiplos usuários têm acesso ao servidor.
Dicas para quem está começando
- Verifique se sua aplicação realmente precisa de funções como
exec()
eshell_exec()
antes de ativá-las. - Adicione funções perigosas à diretiva
disable_functions
nophp.ini
. - Restrinja permissões do
php.ini
para impedir modificações não autorizadas. - Monitore logs do PHP para identificar tentativas de uso de funções bloqueadas.
- Após qualquer alteração no
php.ini
, reinicie o servidor para aplicar as configurações.
Contribuições de Renata Oliveira