Skip to main content

Shell Exec | Security | PHP

  • Shell Exec | Security | PHP

📘 shell_exec no PHP

Descrição

A função shell_exec() envia um comando para o shell do sistema operacional e retorna a saída completa desse comando como uma string.

Sintaxe

string shell_exec(string $command)
  • $command → O comando que será executado no shell.

  • Retorno:

    • Retorna uma string contendo toda a saída do comando.
    • Retorna NULL se a execução falhar ou se o comando não produzir saída.

Exemplo básico

<?php
$output = shell_exec("ls -l");
echo "<pre>$output</pre>";
  • No Linux/macOS: lista os arquivos do diretório.
  • No Windows: você poderia usar "dir" em vez de "ls -l".

Diferença para outras funções

  • exec() → Executa comando, retorna a última linha da saída. (pode preencher um array com todas).
  • system() → Executa comando e imprime diretamente a saída.
  • passthru() → Executa comando e envia a saída bruta (útil p/ binários).
  • shell_exec() → Captura toda a saída como string.

Considerações de segurança

  • Muito perigoso se usado com entradas do usuário sem sanitização, pois pode abrir brecha para Command Injection.

  • Recomendado usar escapeshellcmd() e escapeshellarg() ao lidar com valores externos:

    $file = escapeshellarg($userInput);
    $output = shell_exec("cat $file");

Disponibilidade

  • Disponível em todas as versões modernas do PHP (desde o PHP 4).

  • Pode estar desabilitada no php.ini via disable_functions.

    disable_functions = exec, system, shell_exec, passthru