Разработка на 1С-Битрикс Михаил Базаров
Форум

Как заблокировать доступ на сайт из определенной страны?

Вопросы и ответы по 1С-Битрикс, разборы реальных задач и обсуждение заметок блога. Задайте вопрос или помогите другим — все сообщения проходят модерацию.

Здравствуйте! Помогите разобраться. Пытаюсь заблокировать трафик из нескольких стран. Редакция бизнес, есть модуль веб аналитики с определение стран и айпи. Все что нашел в интернете это в /bitrix/php_interface/init.php (в моем случаии /bitrix/php_interface/s1/init.php) добавить код
Цитата
if (!in_array($_SESSION['SESS_COUNTRY_ID'], array('DE', 'KZ', 'UA', 'N0'))) { die('This site temporary unavailable.'); }
или
Цитата
AddEventHandler("main", "OnBeforeProlog", "MyOnBeforePrologHandler", 50);
public static function MyOnBeforePrologHandler() {
if (!in_array($_SESSION['SESS_COUNTRY_ID'], array('DE', 'KZ', 'UA', 'N0')))
{die('This site temporary unavailable.'); }
}
и пробовал добавлять session_start(); ну все равно не работает.
В чем может быть проблема ?
Скрин.
Да, это извечный и сложный вопрос.
Лично я блокирую по диапазонам IP cпомощью iptables на сервере
Может кто то может разъяснить еще один момент. Стоп лист в проактивной защите работает не корректно. То есть пользователь который находится в стоп листе по айпи может спокойно лазить по сайту, единственное не загружаются комментарии и если перейти в персональный раздел то только тогда ошибка 403 вылезает. Вопрос почему 403 нету при просмотре каталога и новостей ?
Дополню ответ спустя 2 года  :D
Как ограничить доступ к сайту по российским ip-адресам в 1C-Битрикс


Вообще лучше всего это сделать на уровне NGINX через модуль ngx_http_geoip2_module
Но если критично сделать на уровне Битрикса:

Сначала настраиваем модуль "Веб аналитика" прогружаем в него базу IP адресов по странам.
в /local/php_interface создаем файл init.php (если его еще нет) и добавляем в него
Код
AddEventHandler("main", "OnBeforeProlog", "MyOnBeforePrologHandler");
function MyOnBeforePrologHandler() {
    if (
        defined("ADMIN_SECTION") && ADMIN_SECTION == true
        && strpos($APPLICATION->GetCurPage(), "bitrix/admin") !== false
        && strpos($APPLICATION->GetCurPage(), "bitrix/admin/geoip_handler.php") !== false
    ) {
        return;
    }

    if (isset($_SESSION['SESS_COUNTRY_ID']) && $_SESSION['SESS_COUNTRY_ID'] !== 'RU') {
        header('HTTP/1.0 403 Forbidden');
        die('Доступ с вашего IP-адреса запрещён.');
    }
} 
Форма ответов
 
Текст сообщения*
Перетащите файлы
Ничего не найдено
Загрузить картинки
 
Блог-note

Заметки по 1С-Битрикс