Considere a configuração open_basedir
"por site". open_basedir
é uma configuração do php.ini que impedirá que seus scripts acessem arquivos fora de uma lista branca definida. Se o seu servidor hospedar vários sites, impedirá que um site leia as configurações do banco de dados de outro site. Também impedirá que um script php acesse / modifique os arquivos principais do sistema. O Open Basedir é fácil de configurar, basta adicionar a linha " php_admin_value open_basedir /my/list/of/folders:/as/a/colon/seperated/list
" a cada host Apache.
Considere também desativar o mecanismo de script PHP para todos os sites / pastas que não devem conter scripts PHP (por exemplo, uma pasta de imagens carregadas). Novamente, isso é simples, adicione "php_admin_value engine off" a qualquer Apache VirtualHosts que não precise do php. Para desativar o PHP em um diretório, coloque a mesma coisa em uma tag Directory.
Execute as permissões de arquivo o mais rígido possível, evite o acesso de gravação aos scripts PHP para o usuário Apache, isso impede que um script em execução se modifique ou outros scripts no mesmo site / servidor. Evite 777 permissões, se possível, calcule as permissões mínimas necessárias para executar o aplicativo e use-as.
Se você estiver hospedando vários sites, cada um com seu próprio banco de dados, use um usuário MySQL / Postgres separado para cada um deles e defina permissões para cada usuário, de modo que eles tenham apenas acesso aos bancos de dados relevantes. Novamente, isso impedirá que um script não autorizado adultere o banco de dados de outro aplicativo.
Suosin, HardenedPHP, mod_security e similares também são valiosos, mas use-os além de uma configuração bem fechada, não em vez de.