Разрешение на использование запрещённые методы в безопасном режиме

Печать (Ctrl+P)

По материалам из документации БСП и платформы 1С:Предприятие

Некоторые действия, запрещенные в безопасном режиме, могут быть разрешены с помощью профилей безопасности.

Профиль безопасности — это набор явно заданных разрешений на выполнение определенных действий, который можно назначать информационным базам, расширениям конфигурации, дополнительным отчетам и обработкам. Профили безопасности хранятся в кластере серверов «1С:Предприятия» (См рис1) .

Подробнее о профилях безопасности см. документацию по платформе 1С:Предприятие.

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

  • Интернет-ресурсы, протоколы и порты подключения;
  • каталоги файловой системы;
  • внешние компоненты и COM-классы;
  • запускаемые приложения операционной системы;
  • подключенные расширения.

Доступный набор разрешений (Функции-конструкторы) для получения внутреннего описания разрешения на использование внешние ресурсы описаны в общем модуле РаботаВБезопасномРежиме в подсистеме “Работа в модели сервиса” библиотеки стандартных подсистем (БСП):

1. Функция РазрешениеНаИспользованиеКаталогаФайловойСистемы(Знач Адрес, Знач ЧтениеДанных = Ложь, Знач ЗаписьДанных = Ложь, Знач Описание = "") Экспорт

2. Функция РазрешениеНаИспользованиеКаталогаВременныхФайлов(Знач ЧтениеДанных = Ложь, Знач ЗаписьДанных = Ложь, Знач Описание = "") Экспорт

3. Функция РазрешениеНаИспользованиеКаталогаПрограммы(Знач ЧтениеДанных = Ложь, Знач ЗаписьДанных = Ложь, Знач Описание = "") Экспорт

4.Функция РазрешениеНаСозданиеCOMКласса(Знач ProgID, Знач CLSID, Знач ИмяКомпьютера = "", Знач Описание = "") Экспорт

5. Функция РазрешениеНаИспользованиеВнешнейКомпоненты(Знач ИмяМакета, Знач Описание = "") Экспорт

6. Функция РазрешениеНаИспользованиеВнешнегоМодуля(Знач Имя, Знач КонтрольнаяСумма, Знач Описание = "") Экспорт

7. Функция РазрешениеНаИспользованиеПриложенияОперационнойСистемы(Знач ШаблонСтрокиЗапуска, Знач Описание = "") Экспорт

8. Функция РазрешениеНаИспользованиеИнтернетРесурса(Знач Протокол, Знач Адрес, Знач Порт = Неопределено, Знач Описание = "") Экспорт

8. Функция РазрешениеНаИспользованиеПривилегированногоРежима(Знач Описание = "") Экспорт

После создания из выше перечисленных разрешений набор , который предполагают работу с внешними ресурсами, необходимо предварительно запрашивать у администратора разрешение на включение/выключение доступа к ним. Для этого следует вызвать процедуру ПрименитьЗапросыНаИспользованиеВнешнихРесурсов общего модуля РаботаВБезопасномРежимеКлиент.

// Применяет ранее сохраненные в информационной базе запросы на использование внешних ресурсов.
//
// Параметры:
//  Идентификаторы - Массив - идентификаторы запросов, которые требуется применить,
//  ФормаВладелец - ФормаКлиентскогоПриложения - форма, которая должна блокироваться до окончания применения разрешений,
//  ОповещениеОЗакрытии - ОписаниеОповещения - которое будет вызвано при успешном предоставлении разрешений.
//
Процедура ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Знач Идентификаторы, ФормаВладелец, ОповещениеОЗакрытии) Экспорт

Запрос на использование внешних ресурсов для расширений конфигурации

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

Общий порядок подготовки выполнения небезопасных операций:

  1. Создаем на клиенте вызов выполняемой параметрической процедуры или функции и передаем нужные параметры для выполнения действий, например ВыполненниеДействиеНаКлиенте (Параметры)
  2. Создаем разрешение на использование внешних ресурсов на сервере из набора доступных функций – конструкторы из модуля РаботаВБезопасномРежиме. Функция возвращает внутреннее описание разрешения на использование внешний ресурс
  3. Подготовим запрос для администратора из созданных разрешений на включение ( или на выключение) внешних Ресурсов на сервере. Функция возвращает ссылку на записанный в ИБ запрос разрешений, созданных в п.2.
  4. После создания всех запросов в п.3 на включение (или на выключение) изменение разрешений требуется применить на клиенте запрошенные изменения с помощью вызова процедуры ПрименитьЗапросыНаИспользованиеВнешнихРесурсов из общего модуля РаботаВБезопасномРежимеКлиент
&НаКлиенте 
Процедура ВыполненниеДействиеНаКлиенте (Параметры) 
 Разрешения = РазрешенияНаИспользованиеВнешнихРесурсовНасервере(Параметры);
 Идентификаторы = ЗапросНаИспользованиеВнешнихРесурсовНасервере(Разрешения, ЭтотОбъект,Истина);
 ОповещениеОЗакрытии = Новый ОписаниеОповещения("ВыполненниеДействиеЗавершение", ЭтотОбъект,Параметры); РаботаВБезопасномРежимеКлиент.ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Идентификаторы, ЭтотОбъект, ОповещениеОЗакрытии);
КонецПроцедуры 

&НаКлиенте
Процедура ВыполненниеДействиеЗавершение(Результат, Параметры) Экспорт
Если Результат <> Неопределено Тогда
// Тут нужно выполнить действие для которой получено разрешение 
КонецЕсли;
КонецПроцедуры

&НаСервере
Функция ЗапросНаИспользованиеВнешнихРесурсовНасервере (Разрешения, Владелец,РежимЗамещения)
Идентификаторы = Новый Массив();
Идентификаторы.Добавить(РаботаВБезопасномРежиме.ЗапросНаИспользованиеВнешнихРесурсов(Разрешения,Владелец,РежимЗамещения));
Возврат Идентификаторы;
КонецФункции

Пример 1. Разрешения на использование интернет-ресурса

Допустим требуется загрузить файл из интернета по протоколу http

Параметры.АдресФайла = "http://www.1c.ru/ftp/pub/pricelst/price_1c.zip"

Для получения внутреннего описания разрешения на использование интернет-ресурса нужно использовать функцию РазрешениеНаИспользованиеИнтернетРесурса из общего модуля РаботаВБезопасномРежиме с параметрами:

  • Протокол – Строка – протокол, по которому выполняется взаимодействие с ресурсом. Допустимые значения: IMAP, POP3, SMTP, HTTP, HTTPS, FTP, FTPS, WS, WSS.
  • Адрес – Строка – адрес ресурса без указания протокола.
  • Порт – Число – номер порта через который выполняется взаимодействие с ресурсом.
  • Описание – Строка – описание причины, по которой требуется предоставление разрешения.
&НаСервере
Функция РазрешенияНаИспользованиеВнешнихРесурсовНасервере(Параметры)
АдресФайла = Параметры.АдресФайла;
 Разрешения = Новый Массив();
СтруктураURI = ОбщегоНазначенияКлиентСервер.СтруктураURI(АдресФайла);
		
		Разрешения.Добавить(
			МодульРаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса(
				НРег(СтруктураURI.Схема),
				НРег(СтруктураURI.Хост),
				СтруктураURI.Порт));
Возврат Разрешения;
КонецФункции

Пример 2. Разрешение на использование каталога файловой системы

Для получения внутреннего описания разрешения на использование каталога файловой системы нужно использовать функцию РазрешениеНаИспользованиеКаталогаФайловойСистемы из общего модуля РаботаВБезопасномРежиме с параметрами:

  • Адрес – Строка – адрес ресурса файловой системы,
  • ЧтениеДанных – Булево – указывает необходимость предоставления разрешения на чтение данных из данного каталога файловой системы.
  • ЗаписьДанных – Булево – указывает необходимость предоставления разрешения на запись данных в указанный каталог файловой системы.
  • Описание – Строка – описание причины, по которой требуется предоставление разрешения.
&НаСервере
Функция РазрешенияНаИспользованиеВнешнихРесурсовНасервере(Параметры)
АдресФайла = Параметры.АдресФайла;
Разрешения = Новый Массив();
АдресВФайловойСистеме = СтрЗаменить(АдресФайла, "\", "/");
СтруктураАдреса = СтроковыеФункцииКлиентСервер.РазложитьСтрокуВМассивПодстрок(АдресВФайловойСистеме, "/", Истина, Ложь);
СтруктураАдреса.Удалить(СтруктураАдреса.ВГраница());
Каталог = СтрСоединить(СтруктураАдреса, ",");

ЧтениеДанных = Истина;
ЗаписьДанных = Ложь;
Описание = "Чтение файла из каталога файловой системы";
Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеКаталогаФайловойСистемы(Каталог, ЧтениеДанных, ЗаписьДанных,Описание));
Возврат Разрешения;;
КонецФункции

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

  • для расширений конфигурации — на основании запросов разрешений на выполнение небезопасных действий, указанных при загрузке расширения в сервис, а также результатов автоматической проверки расширения конфигурации;
  • для дополнительных отчетов и обработок конфигурации — на основании запросов разрешений на выполнение небезопасных действий, указанных в функции СведенияОВнешнейОбработке дополнительного отчета или обработки.

В расширениях конфигурации, дополнительных отчетах и обработках, предназначенных для использования в сервисе 1cfresh.com, можно использовать следующие небезопасные операции:

  • доступ к каталогу временных файлов (на чтение и/или на запись);
  • доступ к интернету
  • привилегированный режим;
  • доступ к внешним компонентам, входящим в состав конфигурации, для которой разработаны расширение конфигурации, дополнительный отчет или обработка.

Запрещается использовать:

  • доступ к файловой системе (кроме доступа к каталогу временных файлов);
  • доступ к COM-объектам (поскольку серверный код может выполняться на Linux, мы не можем гарантировать наличие COM-объектов на сервере);
  • доступ к внешним компонентам, не входящим в состав конфигурации, для которой разработаны расширение конфигурации, дополнительный отчет или обработка;
  • приложения операционной системы;
  • средства криптографии на стороне сервера.

Таким образом защититься от нежелательных действий незнакомого прикладного решения очень просто: нужно создать пустой профиль безопасности и назначить его информационной базе. Далее, если есть необходимость, можно расширять этот профиль, описывая в нём действия, которые разрешается выполнять прикладному решению.

Пример 3. Разрешение На использование привилегированного Режима

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

&НаСервере
Функция РазрешенияНаИспользованиеВнешнихРесурсовНасервере(Параметры)
 Разрешения = Новый Массив();
Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеПривилегированногоРежима(Параметры.Описание));
Возврат Разрешения;
КонецФункции

Запрос разрешений для дополнительных отчетов и обработок

При необходимости использования в дополнительном отчете или обработке операций, не разрешенных в безопасном режиме:

  1. Запрашивайте в функции СведенияОВнешнейОбработке дополнительного отчета или обработки нужные разрешения с помощью вызовов функций:
    • РаботаВБезопасномРежиме.РазрешениеНаИспользованиеВнешнейКомпонентыРаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса
  2. В функции СведенияОВнешнейОбработке дополнительного отчета или обработки указывайте режим работы дополнительного отчета или обработки Безопасный.

Пример в обработке _ДемоЗагрузкаНоменклатурыИзПрайсЛистаПрофилиБезопасности из Демонстрационной конфигурации «Библиотека стандартных подсистем».

Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("2.2.2.1");
ПараметрыРегистрации.Информация = НСтр("ru = 'Обработка для загрузки номенклатуры из прайс-листа фирмы ""1C"" с использованием профилей безопасности. На сервере должен быть установлен Microsoft Office или Data Connectivity Components.'");
ПараметрыРегистрации.Вид = ДополнительныеОтчетыИОбработкиКлиентСервер.ВидОбработкиДополнительнаяОбработка();
ПараметрыРегистрации.Версия = "3.1.8.239";
ПараметрыРегистрации.БезопасныйРежим = Истина;

Команда = ПараметрыРегистрации.Команды.Добавить();
Команда.Представление = НСтр("ru = 'Параметры загрузки номенклатуры из прайс-листа (профили безопасности)'");
Команда.Идентификатор = "ФормаНастройки";
Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыОткрытиеФормы();
Команда.ПоказыватьОповещение = Истина;

Команда = ПараметрыРегистрации.Команды.Добавить();
Команда.Представление = НСтр("ru = 'Загрузить номенклатуру из прайс-листа фирмы ""1C"" (профили безопасности)'");
Команда.Идентификатор = "ЗагрузитьНоменклатуруИзПрайсЛиста";
Команда.Использование = ДополнительныеОтчетыИОбработкиКлиентСервер.ТипКомандыВызовСерверногоМетода();
Команда.ПоказыватьОповещение = Ложь;

Разрешение = РаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса("Excel.Application", "00024500-0000-0000-C000-000000000046");
ПараметрыРегистрации.Разрешения.Добавить(Разрешение);

Разрешение = РаботаВБезопасномРежиме.РазрешениеНаСозданиеCOMКласса("ADODB.Connection", "00000514-0000-0010-8000-00AA006D2EA4");
ПараметрыРегистрации.Разрешения.Добавить(Разрешение);

Возврат ПараметрыРегистрации;

КонецФункции
Previous Article
Next Article

2 Replies to “Разрешение на использование запрещённые методы в безопасном режиме”

  1. Владимир Петренко

    Функция РазрешениеНаИспользованиеКаталогаВременныхФайлов возвращает XDTO Объект который фиг передашь на клиент для процедуры ПрименитьЗапросыНаИспользованиеВнешнихРесурсов

    • Владимир Петренко

      Получилось передать все параметры, но все равно не отарабатывает

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.