Укрепление PHP для WordPress
Опубликовано: 2021-06-29WordPress работает на PHP и является основным компонентом, на который следует обратить внимание при усилении защиты вашего сайта WordPress. В этой статье будут рассмотрены некоторые из наиболее распространенных и простых вещей, которые вы можете решить, когда речь идет о безопасности PHP для WordPress.
Внимание ! Будьте осторожны при внесении изменений в настройки PHP. Неправильные настройки и синтаксис могут повредить ваш сайт. Всегда проверяйте свои изменения в среде разработки или промежуточной среде, прежде чем вносить изменения в рабочую среду.
Оглавление
- Используйте последнюю версию PHP
- Подавить версию PHP
- Удалите все файлы phpinfo()
- Подавить ошибки и предупреждения PHP
- Ограничение включает
- Отключить удаленный файл включает
- Отключить или ограничить опасные функции
- Блокировать выполнение PHP в конфиденциальных каталогах
- Вывод
Используйте последнюю версию PHP
В дополнение к тому, что вы устанавливаете исправления для своей операционной системы, сервера MySQL, веб-сервера (например, Nginx, Apache, IIS…), крайне важно убедиться, что вы используете полностью поддерживаемую версию PHP 1 . .
Поскольку PHP открыт для Интернета (поскольку WordPress работает поверх интерпретатора PHP), он подвергается большему риску атаки в случае обнаружения эксплойта для уязвимости в PHP. В такой степени поддержание PHP в актуальном состоянии (и, более того, держаться подальше от версий PHP 5.x с окончанием срока службы) имеет решающее значение не только для предотвращения атак, но и для того, чтобы позволить злоумышленникам эскалировать атаки, если им удается закрепиться на вашем веб-сайте WordPress (например, используя уязвимость в плагине WordPress).
Подавить версию PHP
Как и большинство программного обеспечения веб-сервера, по умолчанию PHP предоставляет версию, в которой он работает, через HTTP-заголовок X-Powered-By. Хотя это само по себе не является уязвимостью в системе безопасности, как и в любых других ситуациях, перечисление версий программного обеспечения обычно полезно для злоумышленников на этапе разведки атаки. Таким образом, отключив версию PHP, вы немного усложните атаку.
К счастью, это легко отключить с помощью параметра expose_php. В файле конфигурации php.ini просто добавьте следующее.
expose_php = Off
Удалите все файлы phpinfo()
Создание PHP-файла с помощью функции phpinfo() для отладки является распространенной плохой привычкой многих системных администраторов PHP. Если злоумышленник наткнется на файл phpinfo (обычно с неудивительным названием phpinfo.php), ему будет предоставлено множество информации и подробностей не только о версии PHP, работающей на сервере, но и о других аспектах веб-сайта, таких как в качестве веб-сервера и сервера базы данных.
Если вам действительно нужно запустить phpinfo(), гораздо предпочтительнее сделать это из командной строки, как показано ниже.
Если в вашей системе имеется несколько конфигураций PHP (что бывает очень часто), вы можете использовать следующую команду, чтобы указать, какой файл php.ini использовать.
php -c /etc/php/apache2/php.ini -i
Подавить ошибки и предупреждения PHP
Хотя ошибки, предупреждения и исключения полезны во время разработки, если они отображаются в общедоступной среде, злоумышленники часто используют эту информацию, чтобы получить представление о конфигурации сервера, структуре приложения и компонентах.
Сообщения об ошибках являются одними из наиболее распространенных путей раскрытия информации, часто приводя к утечке такой информации, как путь установки приложения и сведения о подключении к базе данных. Вместо того, чтобы показывать ошибки и предупреждения, убедитесь, что эта информация регистрируется. Дополнительную информацию по этой теме можно найти в официальной документации PHP.
К счастью, это легко отключить с помощью параметра display_errors. В файле конфигурации php.ini просто добавьте следующее.
display_errors = Off log_errors = On
Ограничение включает
Уязвимости включения файлов позволяют злоумышленнику управлять оператором PHP include(). В то время как PHP будет выполнять любой код PHP в файле, который будет включен, он распечатает все остальное (при условии, что это открытый текст). Это означает, что злоумышленник, взявший под контроль уязвимость включения файлов, может в конечном итоге запустить что-то похожее на следующее, что даст ему доступ к конфиденциальным системным файлам. Чтобы узнать больше о включении файлов, ознакомьтесь с этой статьей.
include "../../../../etc/passwd"
Установив параметр open_basedir в php.ini, вы можете указать PHP разрешать включение только в определенном каталоге и ниже. Хотя это не устраняет уязвимости включения файлов, это, безусловно, делает их более ограниченными, а также предотвращает некоторые более сложные атаки, которые могут привести к выполнению кода (когда злоумышленник может выполнять команды на вашем сервере).
Вы можете установить параметр PHP open_basedir следующим образом в файле php.ini.
open_basedir = /var/www/html/example.com
Отключить удаленный файл включает
В дополнение к ограничению локальных включений определенным каталогом с помощью open_basedir также рекомендуется отключить удаленные включения. Атаки с удаленным включением файлов (RFI) работают аналогично атакам с локальным включением файлов, но вместо того, чтобы злоумышленник был привязан к файлам в системе, удаленное включение файлов позволяет злоумышленнику включать файлы по сети. Это чрезвычайно опасно, и большинство RFI-атак заканчиваются тем, что злоумышленник может произвольно выполнить код на вашем веб-сервере (называемый удаленным выполнением кода или RCE).
Чтобы отключить включение удаленных файлов, используйте PHP-параметры allow_url_fopen и allow_url_include в файле php.ini следующим образом.
allow_url_fopen = Off allow_url_include = Off
Отключить или ограничить опасные функции
В случае, если злоумышленнику, несмотря на все ваши меры безопасности, удастся найти уязвимость в PHP-безопасности вашего WordPress, которую он сможет использовать, последнее, что вам нужно, — это чтобы он мог запускать произвольный код на вашем сервере. . Если злоумышленник может запустить произвольный код на вашем сервере, он, вероятно, может установить веб-оболочку или установить обратную оболочку для дальнейшего контроля над вашим сервером и использовать его для своих гнусных распоряжений (например, для распространения вредоносного ПО, использования вашего веб-сайта для фишинговых кампаний или отказа). сервисных атак или даже добычи криптовалюты).
Отключив такие функции, как shell_exec() и system(), вы можете предотвратить использование этих опасных функций пользователями и злоумышленниками. Хотя могут быть законные причины для использования этих функций, их очень мало и они далеко друг от друга, и обычно есть более безопасный способ добиться того же результата.
Внимание ! Тщательно протестируйте следующее в тестовой или промежуточной среде, прежде чем запускать это в рабочей среде, так как некоторые программы/плагины, которые вы используете, могут (надеюсь, законно) зависеть от этих функций.
Ниже приведен набор потенциально опасных функций, которые вы можете захотеть отключить в PHP с помощью параметра disable_functions в файле php.ini.
disable_functions = php_uname, getmyuid, getmypid, passthru, leak, listen, diskfreespace, tmpfile, link, ignore_user_abord, shell_exec, dl, exec, system, highlight_file, source, show_source, fpaththru, virtual, posix_ctermid, posix_getcwd, posix_getegid, posix_geteuid, posix_getgid, posix_getgrgid, posix_getgrnam, posix_getgroups, posix_getlogin, posix_getpgid, posix_getpgrp, posix_getpid, posix_getppid, posix_getpwnam, posix_getpwuid, posix_getrlimit, posix_getsid, posix_getuid, posix_isatty, posix_kill, posix_mkfifo, posix_setegid, posix_seteuid, posix_setgid, posix_setpgid, posix_setsid, posix_setuid, posix_times, posix_ttyname, posix_uname, proc_open, proc_close, proc_get_status, proc_nice, proc_terminate, phpinfo</em>
Блокировать выполнение PHP в конфиденциальных каталогах
По умолчанию вашему каталогу wp-content/uploads , который используется для загрузки тем, плагинов, изображений, видео и других файлов на ваш веб-сайт, разрешено выполнять код PHP. Это довольно рискованно — если злоумышленник каким-то образом сможет воспользоваться уязвимостью загрузки файлов в плагине или теме, он может загрузить веб-шелл или аналогичный бэкдор. Поскольку выполнение PHP будет разрешено в каталоге wp-content/uploads , злоумышленник может фактически выполнить этот PHP-код для выполнения своих злонамеренных действий.
Предотвратить это на самом деле очень просто — отключите выполнение PHP в wp-content/uploads и каталоге. Наивным способом было бы просто заблокировать доступ к файлам *.php таким образом, используя .htaccess .
<Files *.php> deny from all </Files>
Однако указанную выше конфигурацию относительно легко обойти — PHP в большинстве случаев с удовольствием выполнит файлы .phtml .php3. Самым пуленепробиваемым способом было бы буквально отключить движок PHP в каталоге. Следующая конфигурация .htaccess должна быть помещена в каталоги wp-content/uploads и wp-includes (еще один каталог, на который обычно нацеливаются злоумышленники).
php_flag engine off
Безопасность PHP для WordPress — последние мысли
Хотя сам WordPress считается надежной и безопасной платформой, среда и инфраструктура, в которой работает ваша установка WordPress, имеют большое значение для обеспечения безопасности вашего сайта в целом. Реализация тем, затронутых в этом руководстве по усилению безопасности PHP, предоставит вам вторую линию защиты, значительно усложнив для злоумышленника эскалацию атаки после использования уязвимости на вашем веб-сайте WordPress.
Если вы хотите узнать больше о том, как повысить безопасность вашего сайта WordPress, прочитайте наше подробное руководство по безопасности и укреплению безопасности WordPress.
Ссылки, использованные в этой статье
↑ 1 | https://www.php.net/supported-versions.php |
---|