29 сентября 2022
2350
При разворачивании сайта локально для разработки при входе на сайт появляется сообщение:

Forbidden
Access denied.

Сообщение появляется и в админке, и в публичной части.

Как это починить?


Сообщение не похоже на ошибку Forbidden от Apache, видимо, её выводит сам Битрикс.

Скорее всего срабатывает какой-нибудь модуль безопасности.

Чтобы временно отключить его, надо найти файл bitrix/modules/main/include.php

Там найти код вида:

foreach (GetModuleEvents("main", "OnPageStart", true) as $arEvent) 
    ExecuteModuleEventEx($arEvent);

Этот код вызывает обработчики, который запускаются самыми первыми при обработке запроса. В том числе там могут быть обработчики модулей, которые ограничивают доступ. Нужно закомментировать этот код и попробовать войти в админку. Если не помогло, то в этом же файле ниже есть еще один похожий блок:

foreach(GetModuleEvents("main", "OnBeforeProlog", true) as $arEvent)
    ExecuteModuleEventEx($arEvent);

Надо закомментировать его и снова попробовать зайти.

Если получилось, то дело точно в каком-либо модуле. Чтобы поточнее узнать, в каком именно, можно заменить код на такой (для первого блока):

foreach (GetModuleEvents("main", "OnPageStart", true) as $arEvent) {
    print_r($arEvent);
    ExecuteModuleEventEx($arEvent);
}

После обновления страницы будет Forbidden, а перед ним массивы, описывающие события. Последним (самым нижним) событием и будет то, которое привело к сообщению Forbidden. Выглядит это примерно так:

...

Array
(
    [SORT] => 100
    [TO_MODULE_ID] => security
    [TO_PATH] => 
    [TO_CLASS] => Bitrix\Security\HostRestriction
    [TO_METHOD] => onPageStart
    [TO_METHOD_ARG] => Array
        (
        )

    [VERSION] => 2
    [TO_NAME] => Bitrix\Security\HostRestriction::onPageStart (security)
    [FROM_DB] => 1
    [FROM_MODULE_ID] => main
    [MESSAGE_ID] => OnPageStart
)
<html>
    <head>
        <title>403 Forbidden</title>
    </head>
    <body>
        <h1>Forbidden</h1>
        Access denied.
    </body>
</html>

Здесь видно, что сработало действие HostRestriction модуля security.

Чтобы отключить его в админке, нужно зайти в "Настройки" -> "Проактивная защита" -> "Хосты/домены"


e9434d0e-434e-4c1a-9eb7-7b9a91fc58c4.png

Там надо:
  1. Снять галку "Ограничивать".
  2. В списке доменов указать имя сайта для разработки или маску, под которую он подойдет (например, *.dev.loc).
  3. Нажать Сохранить.
24e8aca7-af8c-4cf0-92ff-ab742fe0f9fb.png

Теперь можно восстанавливать исходное состояние include.php. Важно не забыть это сделать, потому что иначе могут перестать работать какой-нибудь другой важный функционал.
Позвоните нам!
Личный кабинет
Вам будет доступна история заказов, управление рассылками, свои цены и скидки для постоянных клиентов и прочее.
Ваш логин
Ваш пароль
Работаем для вас с 9:30 до 18:30
Ждем писем!
г. Санкт-Петербург, Краснопутиловская ул., 69