Хочу поделится комплексом мер по защите WordPress в Nginx. При все своей простоте, данные рекомендации помогут противостоять сбору информации о установленном движке и используемых плагинов, а также защитят от некоторых типов атак.
Используя стандартные архитектурные особенности движка WordPrees и популярных плагинов, злоумышленники путем специально сформированного запроса могут получить информацию о версии используемой СMS и используемых плагинов. Для того чтобы на основе этой информации использовать известные уязвимости в плагинах или устаревшей версии WordPress.
Наша задача напротив состоит в том, что бы максимально усложнить процедуру сбора информации о сайте WordPress, а также максимально ограничить HTTP-запросы к служебным файлам и директориям WordPress. Для того чтобы защитить WordPress от любопытных глаз, мы будем использовать стандартные возможности Nginx, путем добавления правил в секцию server
нашего блога.
- Защита WordPress в Nginx
- Запретить доступ к php-файлам в wp-includes
- Запретить доступ к php-файлам в wp-content
- Запретить доступ к php-файлам в папке uploads
- Запретить доступ к php-файлам в папках themes и plugins
- Запретить доступ к xmlrpc.php
Защита WordPress в Nginx
Не стоит беспечно наедятся на качество кода WordPress и быстрый выпуск заплаток, которые устранят известные уязвимости движка. Что бы защитить WordPress от потенциальных методов взлома, нужно закрыть доступ к следующим служебным файлам и директориям WordPress:
- Каталог
wp-includes
. Содержит в себе все основные и необходимые файлы для работы фронтэнда WordPress. Папка содержит файлы PHP, CSS и JavaScript, которые обеспечивают основные функции WordPress. - Каталоги
uploads
,themes
иplugins
, которые находятся в папкеwp-content
. Папки используются для загрузки изображений, шаблонов и плагинов WordPress.
Запретить доступ к php-файлам в wp-includes
Чтобы запретить доступ к php-файлам wp-includes
, необходимо использовать следующие правила в настройках Nginx:
location ~* /wp-includes/.*.php$ { deny all; access_log off; log_not_found off; }
Этот каталог всегда расположен в корне WordPress, изменять название или расположение не рекомендуется.
Запретить доступ к php-файлам в wp-content
Чтобы запретить доступ к php-файлам wp-content
, необходимо использовать следующие правила в настройках Nginx:
location ~* /wp-content/.*.php$ { deny all; access_log off; log_not_found off; }
При желании вы можете изменить расположение каталога wp-content
, для этого необходимо использовать параметры WP_CONTENT_DIR
и WP_CONTENT_URL
в файле wp-config.php
Запретить доступ к php-файлам в папке uploads
Чтобы запретить выполнение php-файлов в каталоге загрузок wp-content
, следующие правила в настройках в настройках Nginx:
location ~* /(?:uploads|files)/.*.php$ { deny all; access_log off; log_not_found off; }
По умолчанию каталог с загружаемыми файлами расположен в wp-content
, но при желании может быть изменен в настройка WordPress.
Запретить доступ к php-файлам в папках themes и plugins
Чтобы запретить доступ к php-файлам шаблона и плагинов, необходимо добавить соответствующие правила в настройках Nginx.
Для каталога шаблонов:
location ~* /themes/.*.php$ { deny all; access_log off; log_not_found off; }
Для каталога плагинов:
location ~* /plugins/.*.php$ { deny all; access_log off; log_not_found off; }
Каталоги шаблонов и плагинов WordPress расположены в папке wp-content и имеют название themes и plugins соответственно. Вы можете самостоятельно задать расположение папки плагинов, задав параметры WP_PLUGIN_DIR
и WP_PLUGIN_URL
. Для того чтобы изменить расположение файлов темы, необходимо использовать функцию register_theme_directory()
.
Запретить доступ к xmlrpc.php
Если вы не используете XML-RPC, можно закрыть все запросы к этому файлу в Nginx:
location = /xmlrpc.php { deny all; access_log off; log_not_found off; }