Introdução
A execução remota de código (Remote Code Execution - RCE) é uma das vulnerabilidades mais críticas em aplicações PHP. Ela ocorre quando um invasor consegue injetar e executar código arbitrário no servidor, comprometendo toda a aplicação e seus dados.
1. Desativando funções perigosas no php.ini
O primeiro passo para mitigar esse risco é desativar funções perigosas no php.ini
:
disable_functions = exec, shell_exec, system, passthru, proc_open, popen, eval
Essas funções permitem a execução de comandos do sistema e devem ser desativadas, a menos que sejam estritamente necessárias.
2. Evitando eval()
e include
dinâmico
A função eval()
é extremamente perigosa, pois executa código arbitrário:
// Código inseguro
eval($_GET['codigo']);
Se um atacante enviar codigo=phpinfo();
, o servidor executará esse comando. Nunca utilize eval()
com entradas do usuário.
Da mesma forma, evitar include($_GET['pagina']);
, pois um invasor pode incluir um arquivo remoto malicioso.
3. Validando entradas do usuário
Para impedir que entradas maliciosas sejam processadas, sempre valide e sanitize os dados:
$entrada = filter_input(INPUT_GET, 'parametro', FILTER_SANITIZE_STRING);
Isso remove caracteres perigosos e impede que comandos arbitrários sejam injetados.
4. Restringindo uploads e execuções de arquivos
Se a aplicação permitir upload de arquivos, configure corretamente o diretório para impedir execuções:
- No
.htaccess
:<Directory /var/www/uploads> php_flag engine off </Directory>
Isso impede que arquivos PHP sejam executados dentro da pasta uploads
.
5. Utilizando Least Privilege Principle
Nunca execute o servidor web com privilégios administrativos. Configure permissões adequadas para evitar que um ataque comprometa todo o sistema.
Conclusão
Evitar execução remota de código em PHP exige uma abordagem multifacetada, incluindo desativação de funções perigosas, validação de entradas, restrição de uploads e configuração segura do servidor. Aplicando essas práticas, reduzimos significativamente os riscos de invasão.
Por que prevenir execução remota de código em PHP é essencial?
Vulnerabilidades de execução remota de código são frequentemente exploradas por invasores que buscam comprometer servidores e roubar informações sensíveis. Aplicações PHP mal configuradas podem se tornar alvos fáceis se não seguirem boas práticas de segurança.
A principal causa desse tipo de ataque é a falta de validação nas entradas do usuário, permitindo que comandos arbitrários sejam executados. Desenvolvedores devem garantir que apenas dados confiáveis sejam processados, utilizando filtros e validações rigorosas.
Outra medida importante é a configuração correta do servidor, restringindo o uso de funções perigosas e impedindo que arquivos maliciosos sejam executados. Combinando essas estratégias, podemos construir aplicações mais seguras e resistentes a ataques.
Algumas aplicações:
- Proteger servidores contra execução de código malicioso.
- Evitar que invasores obtenham acesso ao sistema via PHP.
- Garantir a integridade e segurança dos dados armazenados na aplicação.
- Reduzir riscos de ataques que comprometem a estrutura da aplicação.
Dicas para quem está começando
- Desative funções perigosas como
eval()
,exec()
eshell_exec()
nophp.ini
. - Evite
include()
dinâmico com entradas do usuário. - Sanitize todas as entradas antes de usá-las na aplicação.
- Configure corretamente permissões de diretórios para impedir execução de arquivos não autorizados.
- Mantenha o PHP e seus pacotes sempre atualizados para evitar vulnerabilidades conhecidas.
Contribuições de Gustavo Ferraz