Вопрос или проблема
У меня есть сайт на WordPress, работающий в моей локальной сети. Я хочу отключить опасные функции, такие как system и exec, в качестве меры предосторожности. Этот сайт работает на простом PHP-сервере вместо apache2 или nginx.
php -S 127.0.0.1:8001 -f /var/www/html/wordpress/
Поскольку отключение функций в файле /etc/php/7.x/apache2/php.ini не изменит ситуацию. Я мог бы отключить эти функции в /etc/php/7.x/cli/php.ini, но я хочу, чтобы они были отключены только для сайта на WordPress. Есть ли способ обойти это? Моя конечная цель – предотвратить выполнение этих функций через сайт на WordPress.
Создайте файл php.ini
для вашего экземпляра WP и добавьте в него директиву disable_functions
. Затем запустите PHP-сервер с опцией -c
, такой как php -S 127.0.0.1:8001 -c /path/to/php.ini -f /var/www/html/wordpress/
.
Ответ или решение
Для того чтобы обезопасить ваш WordPress сайт и предотвратить выполнение потенциально опасных PHP функций, таких как system
и exec
, вы можете воспользоваться настройками конфигурационного файла PHP. В вашем случае, так как вы используете встроенный сервер PHP вместо Apache или Nginx, и конфигурационный файл /etc/php/7.x/apache2/php.ini
не будет иметь эффекта, лучшим вариантом будет создание отдельного файла php.ini
для вашего WordPress сайта и использования этого файла при старте PHP сервера.
Теория
PHP предоставляет возможность отключать определенные функции, используя директиву disable_functions
в конфигурационном файле php.ini
. Это означает, что вызовы любых функций, перечисленных в этой директиве, будут игнорироваться вашим PHP интерпретатором. Это важный механизм безопасности, который может предотвратить злоупотребление функциями, которые могут быть использованы для выполнения вредоносных команд или манипуляций с сервером.
Пример
Предположим, что у вас есть определенные функции, которые могут представлять угрозу безопасности. Обычно это функции, позволяющие выполнять системные команды, читать или записывать файлы на сервер, или установки соединений с удаленными серверами. Примеры таких функций: system
, exec
, passthru
, shell_exec
, proc_open
, popen
, и curl_exec
.
Создайте новый файл php.ini
в удобном для вас месте, например, /home/username/custom_php.ini
. В этом файле укажите функции, которые вы хотите отключить:
disable_functions = system, exec, passthru, shell_exec, proc_open, popen, curl_exec
Применение
Теперь, когда у вас есть ваш кастомный файл php.ini
, необходимо убедиться, что PHP сервер использует его при запуске. Для этого в командной строке используйте -c
флаг, который позволяет указать путь к специализированному конфигурационному файлу.
Вот как это может выглядеть в вашей ситуации:
php -S 127.0.0.1:8001 -c /home/username/custom_php.ini -f /var/www/html/wordpress/
Это гарантирует, что при запуске PHP интерпретатор будет использовать именно ваш кастомный php.ini
файл, а не системные конфигурации Apache или CLI.
Дополнительные рекомендации
-
Тестирование окружения: После того как все изменения внесены, протестируйте работу вашего сайта, чтобы убедиться, что отключение функций не повлияло на его функциональность. Это поможет убедиться в том, что работа сайта не зависит от этих конкретных функций.
-
Журналирование: Рассмотрите возможность включить логирование ошибок для отладки потенциальных проблем, которые могут возникнуть из-за отключения функций.
-
Обновление конфигурации: Убедитесь, что все изменения в конфигурации PHP поддерживаются будущими обновлениями WordPress и темами/плагинами, которые могут зависеть от отключенных функций.
-
Уязвимости плагинов и тем: Также учтите, что безопасность вашего WordPress сайта не ограничивается только изменением настроек PHP. Регулярно обновляйте плагины, темы и сам WordPress до последних версий, чтобы минимизировать риски уязвимостей.
Таким образом, использование отдельного файла php.ini
для вашего локального WordPress сайта является наиболее подходящим решением для отключения опасных функций PHP в условиях, когда система работает с помощью встроенного PHP сервера. Это повышает безопасность и обеспечивает контролируемую среду для выполнения кода.