При публикации информационной базы 1С на веб-сервере (под управлением IIS или Apache) пользователи получают возможность подключаться к ней двумя способами: через обычный браузер (веб-клиент) и через установленную на локальном компьютере платформу (тонкий клиент по протоколу HTTP/HTTPS). Часто возникает задача безопасности: разрешить удаленный доступ только ограниченному кругу сотрудников, полностью заблокировав остальным возможность подключаться к базе из дома или внешних сетей.
На первый взгляд кажется, что достаточно снять у нежелательных пользователей роль «Веб-клиент» в конфигураторе. Однако на практике выясняется неприятный нюанс: тонкий клиент под управлением платформы игнорирует это ограничение и успешно подключается по протоколу HTTP, даже если доступ через браузер для пользователя закрыт. Снятие же роли «Тонкий клиент» приведет к тому, что пользователь не сможет работать в базе даже внутри локальной сети офиса.
В этой статье мы подробно разберем, как решить эту проблему, используя различные подходы: от простых программных до надежных административных методов на уровне веб-сервера.
---
Этот способ является наиболее гибким со стороны разработчика 1С, так как позволяет настроить индивидуальные правила для каждого пользователя информационной базы прямо в коде конфигурации.
Суть метода заключается в перехвате события старта системы еще до того, как пользователь начнет активную работу. Мы проанализируем строку соединения с базой и определим тип клиента. Если это тонкий клиент, подключенный через веб-сервер, мы проверим права текущего пользователя и при необходимости прервем сеанс.
Выполним следующие шаги по реализации:
УстановкаПараметровСеанса.СтрокаСоединенияИнформационнойБазы() возвращает строку, которая начинается с префикса ws="..." (Web Service), в отличие от файлового варианта (File="...") или клиент-серверного (Srvr="...").Рассмотрим пример программного кода, который блокирует вход через тонкий клиент по HTTP для всех, у кого нет специальной роли (например, созданной нами роли РазрешенУдаленныйДоступ):
Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)
// Получаем строку соединения информационной базы
СтрокаСоединения = СтрокаСоединенияИнформационнойБазы();
// Проверяем, используется ли подключение через веб-сервер
ЭтоВебПодключение = (Найти(ВРег(СтрокаСоединения), "WS=") > 0);
Если ЭтоВебПодключение Тогда
// Нам нужно отсечь именно тонкий клиент.
// Используем директиву препроцессора для определения типа клиента.
#Если ТонкийКлиент Тогда
// Проверяем, есть ли у пользователя специализированное право на удаленную работу.
// Вместо роли можно использовать проверку реквизита в справочнике "Пользователи".
Если Не РольДоступна("РазрешенУдаленныйДоступ") Тогда
// Прерываем сеанс с выводом понятного сообщения об ошибке
ВызватьИсключение "Доступ к базе через тонкий клиент по сети Интернет для Вас заблокирован.
|Пожалуйста, используйте подключение из локальной сети офиса или обратитесь к системному администратору.";
КонецЕсли;
#КонецЕсли
КонецЕсли;
КонецПроцедуры
Преимущества метода: простота реализации, возможность гибко управлять разрешениями через стандартные роли или дополнительные реквизиты пользователей в пользовательском режиме 1С.
Недостатки метода: блокировка происходит на этапе запуска сеанса 1С. Сеанс все же кратковременно создается на сервере приложений, что тратит ресурсы, хотя и решает задачу недопущения пользователя к данным.
---
Если мы хотим заблокировать доступ еще до того, как запрос дойдет до кластера серверов 1С, лучшим решением будет фильтрация запросов на уровне веб-сервера (IIS или Apache).
Любой веб-браузер (веб-клиент) и тонкий клиент 1С при отправке HTTP-запросов передают веб-серверу заголовок User-Agent. По этому заголовку веб-сервер может однозначно определить, кто именно пытается подключиться:
Mozilla/5.0... Chrome/... Safary/....1C+Enterprise или 1CV8C.Разберем, как настроить блокировку тонкого клиента на примере популярного веб-сервера Microsoft IIS:
{HTTP_USER_AGENT}*1C+Enterprise* (или *1CV8C* в зависимости от версии платформы)Аналогично в веб-сервере 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 любому пользователю, который попытается постучаться на этот адрес через тонкий клиент, при этом обычные пользователи через браузер продолжат работать без каких-либо ограничений.
---
Если перед нами стоит задача разрешить удаленный доступ только определенным доверенным сотрудникам (например, руководству или бухгалтерам на удаленке), а всех остальных сотрудников оставить строго работать внутри офиса, идеальным решением будет авторизация по клиентским SSL-сертификатам.
Рассмотрим по шагам эту схему:
SSL Settings -> Require SSL -> Require Client Certificates).При такой конфигурации, если обычный сотрудник попытается установить подключение со своего домашнего компьютера через тонкий клиент или браузер, веб-сервер отклонит его запрос на этапе рукопожатия TLS (Handshake), поскольку у него на устройстве отсутствует доверенный сертификат безопасности. База данных при этом будет в полной безопасности от несанкционированного доступа извне.
---
Еще один популярный административный метод, позволяющий обойтись без сложного программирования в 1С, — публикация одной базы в два разных виртуальных каталога на веб-сервере.
Представим себе следующую схему настройки:
http://server/office): эта публикация доступна только пользователям локальной сети офиса (или через корпоративный VPN). На этой публикации разрешена работа как тонкого клиента, так и веб-клиента. Внешний доступ к этому адресу из интернета полностью закрыт на сетевом шлюзе (файрволе).https://server/remote): эта публикация «смотрит» во внешнюю сеть интернет. На уровне настроек веб-сервера (как описано в Методе 2) для этого конкретного виртуального каталога мы настраиваем жесткую блокировку User-Agent тонкого клиента. В результате удаленные пользователи смогут зайти только через веб-клиент (браузер), где у них можно легко ограничить права стандартными ролями 1С.---
Каждый из рассмотренных методов имеет свои преимущества в зависимости от ИТ-инфраструктуры вашего предприятия: