Por certo, isso não deve acontecer - e se você é o administrador do site , é sua culpa que aconteceu
We are considering mod_php and FastCGI,
Isto não tem nada a ver com os problemas que você está tendo atualmente nem como você faz para tornar o sistema seguro.
A primeira coisa que você precisa é de um modelo de permissões e processos para suportar a implantação de código no servidor de maneira controlada.
Uma abordagem seria configurar um grupo para cada projeto que exclui o servidor da Web uid e, em seguida, implantar todos os arquivos como rw-rw-r para o usuário e o grupo de desenvolvimento - o servidor da Web depende de permissões 'outros' para ler arquivos. Configure todos os diretórios com o grupo de bits pegajosos definido.
Cada projeto deve estar em seu próprio subdiretório dentro da raiz do documento, e cada projeto deve ter uma pasta de upload gravável pelo servidor web fora da raiz do documento, e pelo menos um dedicado (por grupo) incluir dir fora da raiz do documento ( por preferência cada um deve estar em seu próprio vhost). O acesso deve ser restrito por open_basedir
Publique um padrão de codificação que deve especificar que as permissões não podem ser manipuladas a partir das configurações padrão - e ajuste seu IDS para pegar em quaisquer arquivos PHP adicionados ou permissões alteradas.
Mas existem outros modelos.
O importante é que:
-
O servidor da Web nunca deve poder gravar em arquivos acessíveis diretamente pelo servidor da Web.
-
Se o conteúdo enviado pelo usuário tiver que ser acessado, ele deve ser higienizado ao carregar e acessado mediado por um script do controlador.
-
no caso de código malicioso ser implantado no servidor, ele deve ser estritamente limitado na quantidade de danos que pode causar
-
deve ser possível detectar quando as alterações de código são feitas no sistema
-
Seu modelo de permissões deve impedir que um projeto interfira no comportamento de outro projeto (por exemplo, suponha que você tivesse um diretório comum 'include' - mesmo que os projetos diferentes não pudessem corrigir os arquivos dos outros, eles poderiam mascarar comportamentos usando o mesmo nome de arquivo em outro lugar no caminho include - ou pior, crie erros usando a mesma função ou nome de classe duas vezes).