Как запретить Drupal использовать sites/default для неизвестных хостов

В Drupal при использовании мультисайтовой конфигурации (sites/sites.php) существует скрытая особенность: если домен не найден в $sites, Drupal по умолчанию загружает настройки из sites/default. Это может привести к неожиданным проблемам:

  • Открытие сайта по IP-адресу;
  • Подмена домена в Host-заголовке (в том числе в атакующих целях);
  • Доступ к сайту в неподходящем контексте (на продакшене с тестовым доменом и т.д.);
  • Использование кеша с абсолютными ссылками с «чужого домена»;
  • и т.д.

К счастью, поведение легко изменить.

Вообще это — частая и недооценённая проблема. Когда Drupal начинает обслуживать сайт по «чужому» домену (например, IP-адресу, левому хосту или поддомену без настройки), он может:

  • генерировать абсолютные ссылки (<link href="http://bad-host/...">)
  • создавать кешированные страницы с неправильными base_url
  • вставлять canonical, og:url, hrefLang и другие теги с неправильным доменом

Всё это приводит к:

  • случайному загрязнению кеша (page cache, render cache, dynamic page cache) — особенно в анонимных сессиях
  • ошибкам CORS (Cross-Origin Resource Sharing) при загрузке ресурсов (шрифтов, скриптов и т. д.)
  • дублированию страниц в поисковой выдаче с «левыми» доменами
  • невалидной индексации, особенно если сайт проксируется или тестируется с других хостов

Решение

Решение заключается в жестком контроле разрешенных доменов.

Пример sites/sites.php с жёстким контролем

Этот код явно перечисляет допустимые домены, которым разрешён доступ к сайту. Если значение заголовка HTTP_HOST не найдено в списке, выполнение прерывается и возвращается ошибка 403 Forbidden — это происходит ещё до загрузки ядра Drupal. Таким образом, исключается возможность обращения к сайту через незарегистрированные домены, включая IP-адреса или подставленные имена, и блокируется нежелательный fallback на sites/default.

Дополнительно:

Если sites/default не используется — удалите папку её.

Удаление папки sites/default без дополнительных ограничений может привести к непредсказуемым ошибкам при обращении с незарегистрированного домена. Drupal будет пытаться использовать sites/default как fallback, и при её отсутствии выдаст фатальную ошибку. Поэтому удаление этой папки имеет смысл только после того, как вы настроили фильтрацию допустимых доменов в sites/sites.php, и убедились, что sites/default больше не нужен.

Зачем это нужно

Такая проверка:

  • Повышает безопасность;
  • Исключает случайные ошибки при деплое;
  • Делает мультисайт более предсказуемым;
  • Предотвращает «размывание» конфигурации, когда один и тот же сайт начинает открываться с нескольких хостов, не предназначенных для этого.

Мало букафф? Читайте есчо !

Как полностью удалить поле в Drupal, если оно «зависло» в хранилище полей

Сентябрь 5, 2025 г.

Иногда в Drupal возникает ситуация: вы удаляете поле с типов сущностей (bundle), но оно не исчезает полностью из системы. UI говорит, что поле «используется», хотя на самом деле ни одна сущность его не использует. В этом случае поле остаётся в конфигурации ...

Читать

Drupal tmgmt модуль, фиксим баги

Сентябрь 24, 2024 г.

Это мощный модуль перевода контента. Из коробки, позволяет делать это вручную, вытягивая поля сущности в единый список. К нему можно подключить Deepl в качестве провайдера (tmgmt_deepl) и автоматизировать перевод контента. Модуль решает очень большую ...

Читать

Создать пользователя сразу на всех сайтах мультисайтинга в Drupal

Июнь 6, 2019 г.

С помощью drush и такой то матери (bash) обойдем все сайты и создадим одного и того же юзера на каждом из сайтов. Долго тянуть не стану - вот текст скрипта: [crayon-698195f8e2f70303220697/] В начале вы задаёте нужные переменные (задайте свои ...

Читать

Где находится админка друпал?

Ноябрь 18, 2015 г.

Сам бы я не додумался написать подобный гайд, да люди подсказали. :) Если вы вошли на сайт как администратор, а полоска админ меню сверху не появилась, то скорее всего не установлен/не включен соответствующий модуль. Тем не менее, админка drupal ...

Читать
 

Комментарии к «Как запретить Drupal использовать sites/default для неизвестных хостов»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: