Como evito que o PHP execute comandos shell?

2

como evitar que o apache execute scripts bash? Que qualquer script php não pode executar o comando no bash (por exemplo, o comando que irá adicionar links para meus arquivos php e html). Existe uma maneira de fazer isso?

EDIT: Eu tinha em mente qualquer comando bash não apenas arquivos .sh

    
por B14D3 17.02.2011 / 09:19

3 respostas

2

Você pode querer olhar para o parâmetro de configuração open_basedir. Não é realmente uma resposta à sua pergunta, mas está relacionada. É uma boa ideia definir um diretório por site, como "/ var / www / site: / usr / share / php: / tmp". (O / usr / share / php pode ser diferente em cada máquina).

Para realmente responder à sua pergunta: você também pode colocar isso em um .htaccess:

<Files *.sh>
  ForceType 'text/plain; charset=UTF-8'
</Files>
    
por 17.02.2011 / 09:50
2

Você pode desativar o acesso a funções específicas no PHP usando a diretiva disable_functions no php.ini, por exemplo:

disable_functions = exec,system,print

Alternativamente, se você quiser impedir que o PHP edite o conteúdo de outros arquivos de texto (como indicado no seu comentário), você pode protegê-los com permissões do sistema de arquivos - faça com que o usuário do servidor web (ou o usuário que o PHP executa) não tem permissão de gravação para os arquivos.

ref:

link

link

    
por 03.03.2011 / 14:35
1

O Apache, por si só, não pode "executar" scripts ou comandos de bash. Acho que a pergunta que você está realmente fazendo é: "Como posso impedir que o PHP execute comandos shell?".

Infelizmente, as outras duas respostas aqui estão incorretas e fornecem soluções inadequadas para isso.

open_basedir afeta apenas quais arquivos podem ser abertos pelo PHP, por exemplo através de fopen() . Você pode testar se os comandos do shell ainda podem ser executados usando este código trivial:

<?php
ini_set('open_basedir', '/tmp');
system('ls');

Para realmente restringir quais comandos shell podem ser executados pelo PHP, você deve utilizar modo de segurança . Você deve estar ciente de que o modo de segurança está obsoleto no PHP 5.3 e certamente será removido em uma versão futura . A ativação do modo de segurança restringe o acesso a um número de funções "inseguras" , principalmente exec() , system() e passthru() .

No entanto, novamente, você deve estar ciente de que o uso do modo de segurança é altamente desencorajado .

Quando o modo de segurança for removido, você não terá mais meios de restringir quais comandos podem ser executados pelo PHP.

    
por 03.03.2011 / 08:45