Розгляньте налаштування на open_basedir
основі "на сайт". open_basedir
- це налаштування php.ini, яке не дозволить вашим скриптам отримати доступ до файлів поза визначеним білим списком. Якщо ваш сервер розміщує кілька сайтів, це забороняє одному сайту читати налаштування бази даних з іншого сайту. Це також не дозволить php-скрипту отримати доступ / змінити основні системні файли. Відкритий базир легко налаштувати, просто додайте рядок php_admin_value open_basedir /my/list/of/folders:/as/a/colon/seperated/list
до кожного "Apache".
Також розгляньте можливість вимкнення механізму сценаріїв PHP для всіх сайтів / папок, які не повинні містити скрипти PHP (наприклад, папка завантажених зображень). Знову ж таки, це просто, додайте "php_admin_value engine off" в будь-який Apache VirtualHosts, якому не потрібен php. Щоб відключити PHP в каталозі, введіть те саме в тег Directory.
Запустіть дозволи файлів якомога щільніше, уникайте доступу записів до PHP-скриптів для користувача Apache, це запобігає виконанню сценарію не змінювати себе чи інші сценарії на тому ж сайті / сервері. Уникайте 777 дозволів, якщо це можливо, з'ясуйте мінімальні дозволи, необхідні для запуску програми та їх використання.
Якщо ви розміщуєте кілька сайтів, кожен з яких має власну базу даних, використовуйте окремий користувач MySQL / Postgres для кожного і встановлюйте дозволи для кожного користувача таким чином, щоб вони мали доступ лише до відповідних баз даних. Знову ж це дозволить запобігти неправомірному скрипту підробляти базу даних іншого додатка.
Suosin, HardenedPHP, mod_security тощо є також цінними, але використовуйте їх на додаток до жорстко заблокованої конфігурації, а не для цього.