PHP File Injection — одна из распространённых угроз для WordPress-сайтов, при которой злоумышленники пытаются загрузить или внедрить вредоносные PHP-скрипты на сервер. Эти скрипты могут дать полный контроль над сайтом, украсть данные пользователей или использовать сервер для рассылки спама. В этой статье мы подробно разберём, как эффективно защититься от этой угрозы на уровне кода и настроек.
Что такое PHP File Injection и как она происходит
PHP File Injection — атака, при которой злоумышленник загружает на сервер вредоносный PHP-файл. Обычно это происходит через уязвимости в плагинах, темах или в самой CMS, например, через недостаточную проверку загружаемых файлов или обход ограничений.
Основные пути внедрения вредоносных PHP-файлов:
- Загрузка файлов через уязвимые формы загрузки;
- Использование уязвимостей в плагинах с функцией редактирования файлов;
- Обход ограничений с помощью специальных техник (например, двойные расширения:
file.php.jpg); - Выполнение удалённого включения файлов (Remote File Inclusion).
Если не предпринять меры, это может привести к компрометации всего сайта и сервера.
Практические методы защиты от PHP File Injection
Ограничение типов загружаемых файлов
Самый простой и эффективный способ — запретить загрузку PHP-файлов и других исполняемых скриптов через стандартный механизм загрузки WordPress. Для этого в файл functions.php вашей темы или в плагин можно добавить следующий код:
function wpprotect_restrict_upload_mimes( $mimes ) {
unset( $mimes['php'] );
unset( $mimes['phtml'] );
unset( $mimes['php3'] );
unset( $mimes['php4'] );
unset( $mimes['php5'] );
return $mimes;
}
add_filter( 'upload_mimes', 'wpprotect_restrict_upload_mimes' );Этот код удаляет из списка разрешённых MIME-типов все варианты PHP-файлов, что исключает их загрузку через медиа-загрузчик WordPress.
Настройка .htaccess для запрета исполнения PHP в папках с загрузками
Даже если вредоносный PHP-файл каким-то образом попадёт в папку загрузок (wp-content/uploads), его исполнение можно запретить на уровне веб-сервера.
Для Apache создайте или отредактируйте файл .htaccess в папке wp-content/uploads со следующим содержимым:
# Запретить исполнение PHP в папке uploads
<Files *.php>
deny from all
</Files>Для Nginx добавьте в конфигурацию сайта:
location ~* /wp-content/uploads/.*\.php$ {
deny all;
}Это простое, но мощное правило предотвращает запуск PHP-файлов в папке с медиафайлами.
Использование проверенных плагинов безопасности
Для комплексной защиты от разных видов инъекций и атак рекомендуется использовать специализированные плагины. Например:
- Clearfy Pro — мощный инструмент для оптимизации и безопасности, включает функции ограничения загрузок, фильтрации запросов и многое другое;
- WPRemark — помогает отслеживать изменения файлов и уведомляет о подозрительной активности;
- Wordfence Security — популярный бесплатный плагин, который сканирует сайт на наличие вредоносных файлов.
Как программно проверять загружаемые файлы на безопасность
Если вы пишете свой плагин или тему с функцией загрузки файлов, рекомендуется дополнительно проверять содержимое файлов. Например, можно проверять, что загружаемый файл не содержит PHP-кода.
Пример функции проверки загрузки в WordPress с префиксом wpprotect_:
function wpprotect_check_uploaded_file( $file ) {
$content = file_get_contents( $file['tmp_name'] );
if ( preg_match( '/<\?php/i', $content ) ) {
return new WP_Error( 'wpprotect_php_detected', 'Загрузка PHP файлов запрещена.' );
}
return $file;
}
add_filter( 'wp_handle_upload_prefilter', 'wpprotect_check_uploaded_file' );Этот фильтр проверяет содержание файла перед загрузкой и отклоняет файл с PHP-кодом, даже если его расширение не .php.
Мониторинг и реагирование на подозрительную активность
Даже после всех мер стоит настроить мониторинг файловой системы и логов. Для этого подойдут плагины типа Expert Review, которые позволяют отслеживать неожиданные изменения в файлах и быстро реагировать.
Помимо плагинов, можно периодически запускать сканеры вредоносного кода, например, WP-CLI с командой для поиска PHP-инъекций.
Выводы и рекомендации
Защита от PHP File Injection — это сочетание нескольких уровней:
- Ограничение типов загружаемых файлов;
- Запрет исполнения PHP в папках загрузок;
- Использование проверенных плагинов безопасности;
- Программные проверки загружаемых файлов;
- Мониторинг изменений и активность.
Следуя этим рекомендациям, вы значительно снизите риск компрометации своего WordPress-сайта через PHP File Injection. Не забывайте регулярно обновлять плагины и ядро WordPress, так как многие уязвимости закрываются именно в обновлениях.