Рассмотрите возможность настройки open_basedir
на основе сайта. open_basedir
это настройка php.ini, которая запрещает вашим скриптам доступ к файлам вне определенного белого списка. Если на вашем сервере размещено несколько сайтов, один сайт не сможет прочитать настройки базы данных с другого сайта. Это также предотвратит доступ php-скрипта к основным системным файлам. Open basedir легко настроить, просто добавьте строку " php_admin_value open_basedir /my/list/of/folders:/as/a/colon/seperated/list
" к каждому Apache vhost.
Также рассмотрите возможность отключения механизма PHP-скриптов для всех сайтов / папок, которые не должны содержать PHP-скрипты (например, папка с загруженными изображениями). Опять же, это просто, добавьте «php_admin_value engine off» на любой виртуальный хост Apache, для которого не требуется php. Чтобы отключить PHP в каталоге, поместите то же самое в тег Directory.
Запускайте права доступа к файлам настолько жестко, насколько это возможно, избегайте доступа для записи к PHP-сценариям для пользователя Apache, это предотвращает изменение запущенного сценария или других сценариев на том же сайте / сервере. Избегайте разрешений 777, если это вообще возможно, выясните минимальные разрешения, необходимые для запуска приложения, и используйте их.
Если вы размещаете несколько сайтов, каждый со своей собственной базой данных, используйте для каждого отдельного пользователя MySQL / Postgres и установите разрешения для каждого пользователя таким образом, чтобы они имели доступ только к соответствующим базам данных. Опять же, это предотвратит несанкционированный доступ к базе данных другого приложения.
Suosin, HardenedPHP, mod_security и тому подобное также ценны, но используют их в дополнение к сильно заблокированной конфигурации, а не вместо.