Область применения: управляемое приложение, обычное приложение.
1. При использовании интеграции со сторонними приложениями с помощью открытых интерфейсов (в частности, с помощью COM) требуется отключать исполнение произвольного кода средствами вызываемого приложения.
2. В частности, перед программным открытием документов Microsoft Word и Microsoft Excel через COM следует запрещать исполнение макросов. Иначе это может привести к выполнению вредоносных макросов (вирусов), если таковые присутствуют в документе.
НЕПРАВИЛЬНО открывать документ Microsoft Word по умолчанию:
ОбъектWord = Новый COMОбъект("Word.Application");
Документ = ОбъектWord.Documents.Open(ИмяФайла);
ПРАВИЛЬНО открывать документ Microsoft Word с отключением макросов:
ОбъектWord = Новый COMОбъект("Word.Application");
ОбъектWord.WordBasic.DisableAutoMacros(1);
Документ = ОбъектWord.Documents.Open(ИмяФайла);
ПРАВИЛЬНО открывать документ Microsoft Excel с отключением макросов:
ОбъектExcel = Новый COMОбъект("Excel.Application");
ОбъектExcel.AutomationSecurity = 3; // msoAutomationSecurityForceDisable = 3
Документ = ОбъектExcel.Workbooks.Open(ИмяФайла);
3. Если при программном открытии документов Microsoft Office все же необходимо разрешить выполнение автоматически запускающихся макросов, тогда следует реализовать следующую логику работы:
• В конфигурации сделать формы настройки безопасности запуска макросов, отдельно для клиентского и серверного кода со следующими элементами:
o «Запретить автоматический запуск»;
o «Разрешить запуск подписанных макросов (рекомендуется)» (выбран по умолчанию);
o «Разрешить запуск не подписанных макросов (опасно)».
• Форма настройки для клиентского кода должна быть доступна каждому пользователю, настройки должны сохраняться в разрезе пользователей, каждому пользователью должны быть доступны только свои настройки.
• Форма настройки для серверного кода должна быть доступна только администратору, доступ к настройкам должен быть только у администратора.
• При программном открытии документов следует учитывать эти настройки.
3.1. Проверку наличия подписи макросов в документах Microsoft Word можно реализовать так:
ОбъектWord = Новый COMОбъект("Word.Application");
ОбъектWord.WordBasic.DisableAutoMacros(1); // Отключить автозапуск
Документ = ОбъектWord.Documents.Open(ФайлДокумента);
Если Документ.VBASigned Тогда
ОбъектWord.WordBasic.DisableAutoMacros(0); // Включить автозапуск
Документ.RunAutoMacro(2); // wdAutoOpen = 2
Иначе
Документ.Close();
ВызватьИсключение НСтр("ru = 'Документ не подписан. Открытие отменено.'");
КонецЕсли;
3.2. Проверку наличия подписи макросов в документах Microsoft Excel можно реализовать так:
ОбъектExcel = Новый COMОбъект("Excel.Application");
ИсходныйУровеньБезопасности = ОбъектExcel.AutomationSecurity;
ОбъектExcel.AutomationSecurity = 3; // msoAutomationSecurityForceDisable = 3
Документ = ОбъектExcel.Workbooks.Open(ФайлДокумента);
ОбъектExcel.AutomationSecurity = ИсходныйУровеньБезопасности;
Если Документ.VBASigned Тогда
Документ.Close();
Документ = ОбъектExcel.Workbooks.Open(ФайлДокумента);
Иначе
Документ.Close();
ВызватьИсключение НСтр("ru = 'Документ не подписан. Открытие отменено.'");
КонецЕсли;