Considere configurar open_basedir
em uma base "por site". open_basedir
é uma configuração do php.ini que impede que seus scripts acessem arquivos fora de uma lista branca definida. Se o seu servidor hospeda vários sites, ele impedirá que um site leia as configurações do banco de dados de outro site. Isso também impedirá que um script php acesse / modifique os arquivos principais do sistema. 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 vache do 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 de php. Para desativar o PHP em um diretório, coloque a mesma coisa em uma tag do Directory.
Execute as permissões de arquivo o mais tight possível, evite o acesso de gravação aos scripts PHP para o usuário do Apache, isso impede que um script em execução se modifique ou a 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 usá-las.
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 e defina permissões em cada usuário de forma que eles tenham acesso somente aos bancos de dados relevantes. Novamente, isso evitará que um script não autorizado altere o banco de dados de outro aplicativo.
Suosin, HardenedPHP, mod_security e similares também são valiosos, mas use-os em adição a uma configuração tight locked, não em vez de.