Manual do PHP
Anterior |  | Próxima

# Capítulo 24. Instalando como binário CGI

# Ataque Possível

Usando o PHP como binário CGI é uma opção de instalação que por alguma razão não deseja integrar o PHP como um módulo no servidor (como o Apache), ou usará o PHP com tipos diferentes de CGI wrappers para criar ambientes chroot e setuid seguros para os scripts. Esse tipo de instalação normalmente involve copiar o binário executável para o diretório cgi-bin do servidor web. CERT advisory CA-96.11 recomenda não colocar qualquer interpretador nesse diretório. Mesmo se o binário do PHP pode ser usado como um interpretador autônomo, o PHP foi desenhado para previnir os ataques que essa forma de instalação torna possível:

- Acessar arquivos de sistema: `http://my.host/cgi-bin/php?/etc/passwd`

  A informação de consulta em uma URML depois da interrogração (?) é passada como argumentos de linha de comando para o interpretador pea interface CGI. Normalmente os interpretadores abrem e executam o arquivo especificado como primeiro argumento na linha de comando.

  Quando invocado como binárgio CGI, o PHP se recusa a interpretar os argumentos de linha de comando.

- Acessar qualquer domento web no servidor: `http://my.host/cgi-bin/php/secret/doc.html`

  A parte de informação de caminho da URL depois do nome do binário do PHP, `/secret/doc.html` é convencionalmente usada para especificar o nome do arquivo a ser aberto e interpretado pelo programa CGI Normalmente algumas diretivas de configuração do servidor web (Apache: Action) são usadas para redirecionar requisições para documentos como `http://my.host/secret/script.php` para o interpretados do PHP. Dessa maneira, o servidor web primeiro checa as permissões de acesso ao diretório `/secret`, e depois cria a requisição redirecionada `http://my.host/cgi-bin/php/secret/script.php`. Infelizmente, se a requisição é dada originalmente nessa forma, a checagem de permissão não é feita para o arquivo `/secret/script.php`, mas apenas para o arquivo `/cgi-bin/php`. Dessa maneira qualquer usuário que pode acessar `/cgi-bin/php` pode acessar quaisquer documentos protegidos no servidor web.

  No PHP, a opção de configuração em tempo de compilação --enable-force-cgi-redirect e as diretivas de configuração de tempo de execução doc_root e user_dir podem ser usadas para previnir esse ataque, se a árvore de documentos do servidor tiver qualquer diretório com restrições de acesso. Veja abaixo para uma explicação completa de combinações diferentes.

Anterior | Principal | Próxima
Considerações Gerais | Acima | Caso 1: apenas arquivos públicos são disponibilizados