Разрешение на использование запрещённые методы в безопасном режиме
По материалам из документации БСП и платформы 1С:Предприятие
Некоторые действия, запрещенные в безопасном режиме, могут быть разрешены с помощью профилей безопасности.
Профиль безопасности — это набор явно заданных разрешений на выполнение определенных действий, который можно назначать информационным базам, расширениям конфигурации, дополнительным отчетам и обработкам. Профили безопасности хранятся в кластере серверов «1С:Предприятия» (См рис1) .
Подробнее о профилях безопасности см. документацию по платформе 1С:Предприятие.
В профиль безопасности включаются разрешения на внешние ресурсы, необходимые для работоспособности функций приложения:
- Интернет-ресурсы, протоколы и порты подключения;
- каталоги файловой системы;
- внешние компоненты и COM-классы;
- запускаемые приложения операционной системы;
- подключенные расширения.
Доступный набор разрешений (Функции-конструкторы) для получения внутреннего описания разрешения на использование внешние ресурсы описаны в общем модуле РаботаВБезопасномРежиме
в подсистеме “Работа в модели сервиса” библиотеки стандартных подсистем (БСП):
1. Функция РазрешениеНаИспользованиеКаталогаФайловойСистемы(Знач Адрес, Знач ЧтениеДанных = Ложь, Знач ЗаписьДанных = Ложь, Знач Описание = "") Экспорт
2. Функция РазрешениеНаИспользованиеКаталогаВременныхФайлов(Знач ЧтениеДанных = Ложь, Знач ЗаписьДанных = Ложь, Знач Описание = "") Экспорт
3. Функция РазрешениеНаИспользованиеКаталогаПрограммы(Знач ЧтениеДанных = Ложь, Знач ЗаписьДанных = Ложь, Знач Описание = "") Экспорт
4.Функция РазрешениеНаСозданиеCOMКласса(Знач ProgID, Знач CLSID, Знач ИмяКомпьютера = "", Знач Описание = "") Экспорт
5. Функция РазрешениеНаИспользованиеВнешнейКомпоненты(Знач ИмяМакета, Знач Описание = "") Экспорт
6. Функция РазрешениеНаИспользованиеВнешнегоМодуля(Знач Имя, Знач КонтрольнаяСумма, Знач Описание = "") Экспорт
7. Функция РазрешениеНаИспользованиеПриложенияОперационнойСистемы(Знач ШаблонСтрокиЗапуска, Знач Описание = "") Экспорт
8. Функция РазрешениеНаИспользованиеИнтернетРесурса(Знач Протокол, Знач Адрес, Знач Порт = Неопределено, Знач Описание = "") Экспорт
8. Функция РазрешениеНаИспользованиеПривилегированногоРежима(Знач Описание = "") Экспорт
После создания из выше перечисленных разрешений набор , который предполагают работу с внешними ресурсами, необходимо предварительно запрашивать у администратора разрешение на включение/выключение доступа к ним. Для этого следует вызвать процедуру ПрименитьЗапросыНаИспользованиеВнешнихРесурсов
общего модуля РаботаВБезопасномРежимеКлиент
.
// Применяет ранее сохраненные в информационной базе запросы на использование внешних ресурсов.
//
// Параметры:
// Идентификаторы - Массив - идентификаторы запросов, которые требуется применить,
// ФормаВладелец - ФормаКлиентскогоПриложения - форма, которая должна блокироваться до окончания применения разрешений,
// ОповещениеОЗакрытии - ОписаниеОповещения - которое будет вызвано при успешном предоставлении разрешений.
//
Процедура ПрименитьЗапросыНаИспользованиеВнешнихРесурсов(Знач Идентификаторы, ФормаВладелец, ОповещениеОЗакрытии) Экспорт
Запрос на использование внешних ресурсов для расширений конфигурации
Если расширение конфигурации подключено в безопасном режиме и используются операции, не разрешенные в безопасном режиме, то тогда нужно запросить расширения разрешения на выполнение небезопасных операций
Общий порядок подготовки выполнения небезопасных операций:
- Создаем на клиенте вызов выполняемой параметрической процедуры или функции и передаем нужные параметры для выполнения действий, например ВыполненниеДействиеНаКлиенте (Параметры)
- Создаем разрешение на использование внешних ресурсов на сервере из набора доступных функций – конструкторы из модуля РаботаВБезопасномРежиме. Функция возвращает внутреннее описание разрешения на использование внешний ресурс
- Подготовим запрос для администратора из созданных разрешений на включение ( или на выключение) внешних Ресурсов на сервере. Функция возвращает ссылку на записанный в ИБ запрос разрешений, созданных в п.2.
- После создания всех запросов в п.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. Разрешение На использование привилегированного Режима
По умолчанию привилегированный режим выключен, а включать его возможно только в обычном(небезопасном) режиме подключения расширения конфигурации, обработки или отчета
&НаСервере
Функция РазрешенияНаИспользованиеВнешнихРесурсовНасервере(Параметры)
Разрешения = Новый Массив();
Разрешения.Добавить(РаботаВБезопасномРежиме.РазрешениеНаИспользованиеПривилегированногоРежима(Параметры.Описание));
Возврат Разрешения;
КонецФункции
Запрос разрешений для дополнительных отчетов и обработок
При необходимости использования в дополнительном отчете или обработке операций, не разрешенных в безопасном режиме:
- Запрашивайте в функции СведенияОВнешнейОбработке дополнительного отчета или обработки нужные разрешения с помощью вызовов функций:
РаботаВБезопасномРежиме.РазрешениеНаИспользованиеВнешнейКомпонентыРаботаВБезопасномРежиме.РазрешениеНаИспользованиеИнтернетРесурса
- В функции СведенияОВнешнейОбработке дополнительного отчета или обработки указывайте режим работы дополнительного отчета или обработки Безопасный.
Пример в обработке _ДемоЗагрузкаНоменклатурыИзПрайсЛистаПрофилиБезопасности из Демонстрационной конфигурации «Библиотека стандартных подсистем».
Функция СведенияОВнешнейОбработке() Экспорт
ПараметрыРегистрации = ДополнительныеОтчетыИОбработки.СведенияОВнешнейОбработке("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");
ПараметрыРегистрации.Разрешения.Добавить(Разрешение);
Возврат ПараметрыРегистрации;
КонецФункции
Функция РазрешениеНаИспользованиеКаталогаВременныхФайлов возвращает XDTO Объект который фиг передашь на клиент для процедуры ПрименитьЗапросыНаИспользованиеВнешнихРесурсов
Получилось передать все параметры, но все равно не отарабатывает