Как запретить или разрешить вход через тонкий клиент по HTTP/HTTPS для определенных пользователей в 1С

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При публикации информационной базы 1С на веб-сервере (под управлением IIS или Apache) пользователи получают возможность подключаться к ней двумя способами: через обычный браузер (веб-клиент) и через установленную на локальном компьютере платформу (тонкий клиент по протоколу HTTP/HTTPS). Часто возникает задача безопасности: разрешить удаленный доступ только ограниченному кругу сотрудников, полностью заблокировав остальным возможность подключаться к базе из дома или внешних сетей.

На первый взгляд кажется, что достаточно снять у нежелательных пользователей роль «Веб-клиент» в конфигураторе. Однако на практике выясняется неприятный нюанс: тонкий клиент под управлением платформы игнорирует это ограничение и успешно подключается по протоколу HTTP, даже если доступ через браузер для пользователя закрыт. Снятие же роли «Тонкий клиент» приведет к тому, что пользователь не сможет работать в базе даже внутри локальной сети офиса.

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

---

Метод 1. Программный запрет в модуле сеанса (УстановкаПараметровСеанса)

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

Суть метода заключается в перехвате события старта системы еще до того, как пользователь начнет активную работу. Мы проанализируем строку соединения с базой и определим тип клиента. Если это тонкий клиент, подключенный через веб-сервер, мы проверим права текущего пользователя и при необходимости прервем сеанс.

Выполним следующие шаги по реализации:

  1. Откроем конфигуратор нашей базы данных.
  2. В дереве метаданных найдем корневой элемент конфигурации, нажмем по нему правой кнопкой мыши и выберем «Открыть модуль сеанса».
  3. Найдем или создадим предопределенную процедуру УстановкаПараметровСеанса.
  4. Добавим код проверки строки соединения. При подключении через веб-сервер функция СтрокаСоединенияИнформационнойБазы() возвращает строку, которая начинается с префикса ws="..." (Web Service), в отличие от файлового варианта (File="...") или клиент-серверного (Srvr="...").

Рассмотрим пример программного кода, который блокирует вход через тонкий клиент по HTTP для всех, у кого нет специальной роли (например, созданной нами роли РазрешенУдаленныйДоступ):


Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)
    
    // Получаем строку соединения информационной базы
    СтрокаСоединения = СтрокаСоединенияИнформационнойБазы();
    
    // Проверяем, используется ли подключение через веб-сервер
    ЭтоВебПодключение = (Найти(ВРег(СтрокаСоединения), "WS=") > 0);
    
    Если ЭтоВебПодключение Тогда
        
        // Нам нужно отсечь именно тонкий клиент. 
        // Используем директиву препроцессора для определения типа клиента.
        #Если ТонкийКлиент Тогда
            
            // Проверяем, есть ли у пользователя специализированное право на удаленную работу.
            // Вместо роли можно использовать проверку реквизита в справочнике "Пользователи".
            Если Не РольДоступна("РазрешенУдаленныйДоступ") Тогда
                
                // Прерываем сеанс с выводом понятного сообщения об ошибке
                ВызватьИсключение "Доступ к базе через тонкий клиент по сети Интернет для Вас заблокирован. 
                |Пожалуйста, используйте подключение из локальной сети офиса или обратитесь к системному администратору.";
                
            КонецЕсли;
            
        #КонецЕсли
        
    КонецЕсли;

КонецПроцедуры

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

Недостатки метода: блокировка происходит на этапе запуска сеанса 1С. Сеанс все же кратковременно создается на сервере приложений, что тратит ресурсы, хотя и решает задачу недопущения пользователя к данным.

---

Метод 2. Блокировка на уровне веб-сервера по User-Agent (Рекомендуемый административный метод)

Если мы хотим заблокировать доступ еще до того, как запрос дойдет до кластера серверов 1С, лучшим решением будет фильтрация запросов на уровне веб-сервера (IIS или Apache).

Любой веб-браузер (веб-клиент) и тонкий клиент 1С при отправке HTTP-запросов передают веб-серверу заголовок User-Agent. По этому заголовку веб-сервер может однозначно определить, кто именно пытается подключиться:

Разберем, как настроить блокировку тонкого клиента на примере популярного веб-сервера Microsoft IIS:

  1. Откройте Диспетчер служб IIS.
  2. Выберите опубликованное виртуальное приложение вашей базы данных 1С.
  3. В центральной части окна откройте модуль «Переопределение URL-адресов» (URL Rewrite). Если этого модуля нет, его необходимо бесплатно скачать и установить с официального сайта Microsoft.
  4. В панели «Действия» справа выберите «Добавить правило...» и создайте пустое входящее правило.
  5. Задайте имя правила (например, "Блокировка Тонкого Клиента").
  6. В разделе «Условия» добавьте новое условие со следующими параметрами:
    • Входные данные условия: {HTTP_USER_AGENT}
    • Тип сравнения: Соответствует шаблону
    • Шаблон: *1C+Enterprise* (или *1CV8C* в зависимости от версии платформы)
  7. В разделе «Действие» установите тип действия «Отказ в доступе» (Custom Response) со статусным кодом 403 (Forbidden) или выберите сброс соединения (Abort Request).
  8. Примените изменения.

Аналогично в веб-сервере Apache блокировку можно настроить через файл конфигурации или файл .htaccess с помощью модуля mod_rewrite:


RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} ^1C\+Enterprise [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^1CV8C [NC]
RewriteRule ^.*$ - [F,L]

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

---

Метод 3. Использование клиентских SSL-сертификатов (HTTPS)

Если перед нами стоит задача разрешить удаленный доступ только определенным доверенным сотрудникам (например, руководству или бухгалтерам на удаленке), а всех остальных сотрудников оставить строго работать внутри офиса, идеальным решением будет авторизация по клиентским SSL-сертификатам.

Рассмотрим по шагам эту схему:

  1. Переведем веб-сервер с базой 1С на работу исключительно по защищенному протоколу HTTPS.
  2. На веб-сервере настроим требование обязательного предоставления клиентского SSL-сертификата при установлении защищенного соединения (в IIS это опция SSL Settings -> Require SSL -> Require Client Certificates).
  3. Сгенерируем и установим персональные SSL-сертификаты на домашние компьютеры или ноутбуки тех сотрудников, которым официально разрешено работать из дома.

При такой конфигурации, если обычный сотрудник попытается установить подключение со своего домашнего компьютера через тонкий клиент или браузер, веб-сервер отклонит его запрос на этапе рукопожатия TLS (Handshake), поскольку у него на устройстве отсутствует доверенный сертификат безопасности. База данных при этом будет в полной безопасности от несанкционированного доступа извне.

---

Метод 4. Разделение публикаций базы (Два разных веб-адреса)

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

Представим себе следующую схему настройки:

---

Резюме: какой метод выбрать?

Каждый из рассмотренных методов имеет свои преимущества в зависимости от ИТ-инфраструктуры вашего предприятия:

← На главную