Как защитить WordPress от сканирования и выявления уязвимостей

Одной из распространённых угроз для сайтов на WordPress является автоматическое сканирование уязвимостей, которое проводят злоумышленники и боты. Такие сканеры анализируют структуру сайта, пытаются найти известные уязвимости в плагинах, темах или самой системе. Если ваш сайт выставлен открыто и доступен для сканирования, это значительно повышает риск взлома. В этой статье разберём, как эффективно ограничить сканирование сайта, как скрыть ключевые технические детали и какие приёмы помогут снизить вероятность обнаружения уязвимостей.

Почему важно ограничивать сканирование WordPress

Сканирование — это первый этап многих взломов. Автоматические боты пытаются найти открытые административные панели, устаревшие версии плагинов, файлы конфигураций, которые могут содержать секреты, а также уязвимости в коде. Если сайт постоянно подвергается таким проверкам, это увеличивает шанс атаки типа SQL-инъекции, XSS или внедрения вредоносного кода.

Кроме того, постоянное сканирование повышает нагрузку на сервер, что может негативно сказаться на производительности сайта и удобстве пользователей. Ограничение доступа к техническим деталям и контроль сканеров помогают поддерживать стабильную работу и безопасность.

Как определить, что сайт сканируют

Прежде чем принимать меры, полезно убедиться, что ваш сайт действительно подвергается сканированию. Вот основные признаки:

  • В логах сервера вы видите большое количество запросов с одного IP или из одного диапазона IP, особенно с частыми обращениями к административным URL (wp-login.php, wp-admin/).
  • Запросы к файлам, которые не используются на сайте, например readme.html, license.txt, xmlrpc.php.
  • Появление подозрительных запросов с типичными для сканеров User-Agent, например, "Nikto", "WPScan", "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)" (поддельные).

Можно использовать плагины для мониторинга активности, например, Clearfy Pro, который позволяет отслеживать подозрительные обращения и блокировать их.

Технические методы защиты от сканирования WordPress

1. Ограничение доступа к административным разделам через .htaccess

Один из самых простых способов — ограничить доступ к папке wp-admin и файлу wp-login.php по IP-адресу. В файле .htaccess в корне сайта или в папке wp-admin добавьте следующий код:

# Ограничение доступа к wp-admin по IP
<Files wp-login.php>
    Order Deny,Allow
    Deny from all
    Allow from 123.123.123.123
</Files>

# Ограничение доступа к папке wp-admin
<Directory /path/to/your/site/wp-admin/>
    Order Deny,Allow
    Deny from all
    Allow from 123.123.123.123
</Directory>

Замените 123.123.123.123 на ваш IP или диапазон доверенных IP. Это эффективно блокирует большинство автоматических сканеров, не имеющих доступа к вашему IP.

2. Скрытие стандартных URL и файлов WordPress

По умолчанию WordPress оставляет много «следов» в виде стандартных URL, таких как /wp-login.php, /wp-admin/, /wp-content/plugins/, и файлов вроде readme.html. Сканеры часто ищут именно их.

Можно переименовать страницу входа в админку с помощью плагина. Например, Clearfy Pro позволяет задать уникальный URL для входа в админку без сложных настроек.

Также рекомендуем удалить или заблокировать доступ к файлам readme.html и license.txt, которые содержат информацию о версии WordPress:

# Блокировка доступа к readme.html и license.txt
<FilesMatch "^(readme\.html|license\.txt)$">
    Order allow,deny
    Deny from all
</FilesMatch>

3. Отключение XML-RPC, если не используется

Файл xmlrpc.php часто становится объектом атак и сканирования. Если вы не используете возможности удалённого управления WordPress, лучше его отключить.

Добавьте в functions.php вашей темы или в плагин с префиксом wphide_ следующий код:

function wphide_disable_xmlrpc() {
    add_filter('xmlrpc_enabled', '__return_false');
}
add_action('init', 'wphide_disable_xmlrpc');

4. Использование файервола и блокировка ботов

Фаерволы, такие как Clearfy Pro или внешние WAF (Cloudflare, Sucuri) позволяют настроить правила блокировки подозрительного трафика и сканеров.

Можно на уровне сервера или плагина блокировать User-Agent известных сканеров, например:

# Блокировка User-Agent сканеров
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} (Nikto|WPScan|acunetix|sqlmap) [NC]
RewriteRule .* - [F,L]
</IfModule>

Как программно обнаруживать и блокировать сканирование

Пример плагина для блокировки частых обращений к wp-login.php

Ниже пример простого кода, который можно добавить в functions.php или оформить в плагин, для ограничения повторных попыток доступа к странице входа по IP:

function wphide_limit_login_attempts() {
    if (strpos($_SERVER['REQUEST_URI'], 'wp-login.php') !== false) {
        $ip = $_SERVER['REMOTE_ADDR'];
        $limit = 5; // Максимум 5 попыток
        $time_window = 300; // Временное окно в секундах (5 минут)

        if (!session_id()) {
            session_start();
        }

        if (!isset($_SESSION['wphide_login_attempts'])) {
            $_SESSION['wphide_login_attempts'] = [];
        }

        // Очистка старых попыток
        $_SESSION['wphide_login_attempts'] = array_filter($_SESSION['wphide_login_attempts'], function($timestamp) use ($time_window) {
            return ($timestamp + $time_window) > time();
        });

        if (count($_SESSION['wphide_login_attempts']) >= $limit) {
            wp_die('Слишком много попыток входа. Попробуйте позже.');
        } else {
            $_SESSION['wphide_login_attempts'][] = time();
        }
    }
}
add_action('init', 'wphide_limit_login_attempts');

Этот простой механизм может помочь снизить нагрузку от брутфорс-атак и сканирования страницы входа.

Рекомендации по настройке и дополнительные советы

  • Регулярно обновляйте WordPress, темы и плагины, чтобы не оставлять известных дыр.
  • Используйте плагины безопасности, например, Clearfy Pro, которые включают комплексные функции для защиты от сканирования.
  • Отключайте ненужные сервисы и API, например REST API, если не используете.
  • Настраивайте файрволы и правила на сервере, блокируйте подозрительные IP и User-Agent.
  • Используйте капчу или двухфакторную аутентификацию для защиты входа.

Заключение

Защита WordPress от сканирования и выявления уязвимостей — важный аспект безопасности сайта. Даже простые меры, такие как ограничение доступа по IP, переименование страниц входа, отключение ненужных функций и мониторинг активности, значительно снижают риск автоматических атак и повышают устойчивость сайта. Используйте описанные в статье методы и инструменты, чтобы минимизировать следы вашего сайта для сканеров и обеспечить надежную защиту.

⭐⭐⭐⭐⭐