При переходе на платформу версии 8.3.27 многие разработчики и администраторы сталкиваются с непредвиденным поведением: при открытии описания поставки конфигурации, запуске консоли запросов или любых отчетов и обработок, использующих отображение HTML, JavaScript или VBScript, система начинает навязчиво выводить предупреждение безопасности. Разберем по шагам, почему это происходит и как правильно настроить систему для комфортной работы.
Проанализируем архитектурные изменения релиза 8.3.27. До этой версии встроенный элемент управления ПолеHTMLДокумента не контролировался механизмом Защита от опасных действий. Начиная с версии 8.3.27, разработчики платформы расширили действие защитного контура на открытие URL-адресов и локальных файлов через поле HTML-документа. Если у учетной записи пользователя включена данная защита, любое взаимодействие с подобными элементами вызывает окно предупреждения.
Кроме того, флаг защиты может активироваться автоматически в следующих случаях:
Рассмотрим также важную особенность интерактивного выбора: если в окне предупреждения нажать Да, платформа сохранит положительное решение в разрезе текущего пользователя и информационной базы, и диалог для этого ресурса больше появляться не будет. Однако нажатие кнопки Нет системой намеренно не запоминается, поэтому при каждом повторном открытии страницы предупреждение будет появляться снова.
Если с проблемой столкнулся конкретный специалист (например, программист, работающий с внешними инструментами разработчика), разберем самый простой вариант исправления через режим Конфигуратор:
После перезапуска пользовательского сеанса предупреждения при открытии HTML-форм перестанут появляться.
Когда требуется убрать назойливые сообщения сразу у всех пользователей информационной базы, проанализируем возможность пакетного изменения через встроенный язык. Для этого выполним следующий код во внешней обработке или консоли кода:
Для Каждого ПользовательИБ Из ПользователиИнформационнойБазы.ПолучитьПользователей() Цикл
ПользовательИБ.ЗащитаОтОпасныхДействий.ПредупреждатьОбОпасныхДействиях = Ложь;
ПользовательИБ.Записать();
КонецЦикла;
Данный фрагмент перебирает коллекцию ПользователиИнформационнойБазы и для каждого объекта сбрасывает свойство ПредупреждатьОбОпасныхДействиях, после чего фиксирует изменения методом Записать().
Для тестовых контуров или серверов разработки удобнее полностью отключить механизм для конкретных или всех баз через системный файл конфигурации. Рассмотрим, как это сделать:
conf.cfg. На стороне клиента или сервера он расположен в каталоге установки платформы (в подпапке conf).DisableUnsafeActionProtection со списком шаблонов строк подключения баз:
DisableUnsafeActionProtection=.*
Знак .* означает полное отключение механизма для всех информационных баз, запускаемых на данном компьютере или сервере. Если необходимо отключить защиту только для определенной базы, укажем регулярное выражение с точным путем к каталогу файловой базы или строкой серверного подключения.
В платформе 8.3.27 разработчикам стал доступен новый программный инструментарий. Для временного подавления окон безопасности в алгоритмах можно использовать методы глобального контекста:
УстановитьОтключениеЗащитыОтОпасныхДействий(<Значение>) — принимает значение Истина или Ложь, включая или выключая проверку в рамках текущего контекста выполнения.ПолучитьОтключениеЗащитыОтОпасныхДействий() — позволяет узнать текущее состояние флага программного отключения.Важное ограничение: данные методы недоступны для вызова в модулях расширений конфигурации.
Если же вы подключаете внешние обработки программно, не забывайте передавать параметр ЗащитаОтОпасныхДействий в метод Подключить() соответствующих менеджеров (ВнешниеОбработки или ВнешниеОтчеты), чтобы исключить показ диалоговых окон пользователям.
Помните о правилах безопасности: отключение защиты снимает барьер перед выполнением потенциально вредоносного исполняемого кода, поэтому отключать данный механизм рекомендуется только в доверенных контурах и для проверенных инструментов.