Pergunta

Olá Eu tenho algumas perguntas sobre PHP exec () e intermediário ().

1)
Eu nunca usei exec () em PHP, mas tenho visto muitas vezes é utilizada com imagemagick. Agora estou curioso, o que é alguns outros usos comuns onde exec é bom em uma aplicação web?

2)
Cerca de 6 anos atrás, quando eu comecei a brincar com PHP Eu realmente não sei de nada, apenas coisas muito básico e eu tinha um site que ficou comprometida e alguém configuração lá próprio arquivo PHP que estava usando a função passthru () para passar um monte de tráfego passando por meu site para download gratuito de música ou vídeo e eu fui atingido com uma taxa de largura de banda de 4.000 $ do meu host! 6 anos mais tarde, eu sei que soo muito mais sobre como usar o PHP, mas eu ainda não sei como isso já aconteceu comigo antes. Como alguém pode beable para adicionar um arquivo para o meu servidor por meio de código ruim?

Foi útil?

Solução

1] Exec () é realmente útil quando você:

A) Quer executar um programa / utilidade no servidor que php não tem um equivalente de comando para. Por exemplo ffmpeg é comum executar o utilitário através de uma chamada exec (para todos os tipos de conversão de mídia).

B) A execução de outro processo - que você pode bloquear ou não bloquear, - que é muito poderoso. Às vezes você QANT um pcnt_fork embora, ou similar, juntamente com os argumentos CL corretos para não bloqueio.

C) Um outro exemplo é quando tenho de processo XSLT 2.0 - tenho de exec () um serviço Java pequena eu correndo para lidar com as transformações. Muito conveniente. O PHP não suporta XSLT 2.0 transformações.

2] Porra isso é uma vergonha. Bem, muitas maneiras. Há uma família de vulnerabilidade chamado "arquivo remoto incluem vulns", que, basicamente, permitir que um invasor para incluir fonte arbitrária e, portanto, executá-lo em seu servidor. Dê uma olhada em: http://lwn.net/Articles/203904/

Além disso, mencionado acima, digamos que seu fazer algo como (Muito simplificado):

exec("someUnixUtility -f $_GET['arg1']"); 

Bem, imagine o atacante faz, url.come arg1 = "blah; rm-rf /", seu código será basicamente se resumem a:?

exec("someUnixUtility -f blah; rm -rf /");

Que em Unix, você separar comandos w / a; Então, sim -. Que poderia ser um monte de danos

Mesmo com um carregamento de arquivo, imagine que você tira os últimos quatro caracteres (.ext), para encontrar a extensão. Bem, o que dizer algo como isto "exploit.php.gif", então você tira a extensão, por isso você tem exploit.php e você movê-lo para o seu / usuários / imgs / pasta. Bem, tudo o atacante tem de fazer agora é procurar para usuários / imgs / exploit.php e eles podem executar qualquer código que eles querem. Você foi detida naquele ponto.

Outras dicas

  1. Use exec ou quando você quiser executar um programa diferente.

  2. O documentação para intermediário diz:

Atenção

Quando permitindo que os dados fornecidos pelo utilizador para ser passado para esta função, o uso escapeshellarg() ou escapeshellcmd() para garantir que os usuários não podem enganar o sistema com comandos arbitrários.

Alguém tinha provavelmente encontrou uma brecha de segurança no seu script que lhes permitia executar comandos arbitrários. Use as funções dadas a higienizar suas entradas na próxima vez. Lembre-se, nada enviado do cliente pode nunca ser confiável.

exec() permite que você use o código compilado que está no seu servidor, o que seria mais rápido do que php, que é interpretado.

Então, se você tem uma grande quantidade de processamento que precisa ser feito rapidamente, exec() poderia ser útil.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top