Knowledge Base

Раскрытие версии CMS (WordPress, Drupal, Joomla)

Раскрытие версии CMS

Категория: Web Application Security · Риск: low

Раскрытие версии CMS

Почему версия CMS — угроза

Зная точную версию WordPress, Drupal или Joomla, атакующий немедленно ищет **известные CVE для этой версии** и готовые эксплойты. Скрытие версии — первый уровень защиты по принципу «defence in depth».

Где утекает версия

WordPress

# В мета-теге HTML
curl -s https://example.com/ | grep "generator"
# <meta name="generator" content="WordPress 6.4.2" />

# В /readme.html
curl -si https://example.com/readme.html

# В /wp-includes/version.php (закрыт, но структура известна)

# В RSS-фиде
curl -s https://example.com/feed/ | grep "generator"
# <generator>https://wordpress.org/?v=6.4.2</generator>

# В URL стилей/скриптов
# /wp-content/themes/theme/style.css?ver=6.4.2

Drupal

# В мета-теге
curl -s https://example.com/ | grep "generator"
# <meta name="Generator" content="Drupal 10 (https://www.drupal.org)" />

# В CHANGELOG.txt
curl -si https://example.com/CHANGELOG.txt

# В /core/package.json
curl -si https://example.com/core/package.json

Joomla

# В мета-теге
# <meta name="generator" content="Joomla! - Open Source Content Management" />

# В /administrator/manifests/files/joomla.xml
curl -si https://example.com/administrator/manifests/files/joomla.xml

Как скрыть версию

WordPress

// В functions.php вашей темы (или плагин)

// Убрать версию из мета-тега
remove_action('wp_head', 'wp_generator');

// Убрать версию из URL скриптов/стилей
add_filter('style_loader_src',  'remove_wp_version_query', 999);
add_filter('script_loader_src', 'remove_wp_version_query', 999);

function remove_wp_version_query($src) {
    if (strpos($src, 'ver=') !== false) {
        $src = remove_query_arg('ver', $src);
    }
    return $src;
}

// Убрать версию из RSS
add_filter('the_generator', '__return_empty_string');
# Заблокировать /readme.html, /license.txt
location ~* ^/(readme|license|wp-config-sample)\.(html|txt|php)$ {
    deny all;
    return 404;
}

Drupal

// web/sites/default/services.yml
parameters:
  http.response.debug_cacheability_headers: false

// Убрать мета-тег generator в настройках: Configuration → Basic site settings
// "Show META tag information" → uncheck
location ~* ^/(CHANGELOG|INSTALL|README|UPGRADE)\.(txt|md)$ {
    deny all;
    return 404;
}

Joomla

Administrator → System → Global Configuration → Site →
Meta Data Settings → Show Meta Tag → No

Обновление — главная защита

Скрытие версии — дополнительная мера. **Главное** — держать CMS и плагины актуальными:

# WordPress CLI
wp core update
wp plugin update --all
wp theme update --all

# Drupal Composer
composer update drupal/core --with-dependencies

Автоматические уведомления об обновлениях

Связанные проверки