Укрепление PHP для WordPress

Опубликовано: 2021-06-29

WordPress работает на 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 -i

Если в вашей системе имеется несколько конфигураций 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