É possível permitir que os usuários executem código PHP de maneira segura?

1

Estou pensando em desenvolver um tipo de site de teste de programação onde os usuários poderiam escrever código PHP e então ele seria executado no servidor para testar a saída. Eu sei que você quer sempre impedir que os usuários executem o código, mas existe uma maneira de configurá-lo para que o sistema não seja comprometido?

Ou isso apenas abre muitos buracos na segurança?

    
por Matt McCormick 16.09.2011 / 23:16

3 respostas

3

Isto é apenas um pensamento. Eu não considerei isso mais do que alguns minutos. Mas uma maneira possível de fazer isso seria fazer com que seu aplicativo da Web incluísse o código como uma string e enviasse-o para uma Máquina Virtual para processamento.

Dessa forma, você pode manter seu aplicativo da web que fornece a outra funcionalidade do seu site a partir da execução arbitrária de usuários PHP.

A máquina virtual pode ser configurada para que os scripts PHP que são executados não tenham acesso fora da pasta em que são executados, nenhum acesso a qualquer parte da rede, exceto para receber solicitações de e retornar dados para a máquina host. . Você pode até congelar a VM em um estado para que qualquer alteração feita a ela seja desfeita em uma reinicialização.

Mais uma vez, isso é apenas um pensamento. Pode haver desvantagens que não estou vendo. Uma coisa importante a se lembrar é que você precisa ter certeza de que, em nenhum momento, o servidor PHP na máquina host jamais executará o código que está sendo enviado ou retornado pela VM.

    
por 16.09.2011 / 23:27
1

algumas coisas que você deve fazer para aumentar a segurança:

  1. você deve desabilitar muitas funções críticas do php como eval, ...
  2. você deve configurar o open_basedir, execution_time e assim por diante, ...
  3. você deve instalar o php suhosin, fcgi e configurá-lo corretamente!
  4. você deve executar o php como um usuário diferente (por exemplo, testing-user) e limitar os direitos desse usuário
  5. você deve usar o SELINUX para proteger o sistema
  6. você deve usar o iptables para impedir que seu usuário de teste execute ações indesejadas na rede:

    iptables -t mangle -A OUTPUT -p tcp -m proprietário --uid-owner 1001 -j REJECT

  7. você deve atualizar seu software de sistema regurarly! : -)

  8. você também pode configurar um ambiente chrooted

no final, considere a segurança como uma cebola. faça o melhor em qualquer camada para proteger seu sistema. no caso de uma violação de segurança em uma camada, camadas subjacentes devem bloquear invasores ...

    
por 19.09.2011 / 19:52
0

Eu acho que é factível, mas você certamente tem o seu trabalho feito para você, se você quiser fazer isso de qualquer maneira segura. Isso é essencialmente o que qualquer host que oferece PHP está fazendo por qualquer pessoa disposta a gastar um pouco de dinheiro com eles.

Qual seria a sua diferença em estar aberto a qualquer pessoa em geral, a menos que você planeje restringir o acesso a usuários autenticados.

Você vai querer ler sobre o endurecimento do seu sistema desde o PHP / Apache até o SO. Há várias coisas que um sistema reforçado evitará, no entanto, o que limitará a utilidade do teste.

Se você fizer isso, eu altamente recomendaria um mecanismo de validação / anti-bot como o Captcha / reCaptcha em sua página de código.

Se você não é bem versado em segurança do sistema, então eu não o tocaria pessoalmente.

    
por 16.09.2011 / 23:23