#std775¶
Безопасность программного обеспечения, вызываемого через открытые интерфейсы¶
1.¶
При интеграции со сторонними приложениями через открытые интерфейсы (в частности, COM) отключайте исполнение произвольного кода средствами вызываемого приложения.
2.¶
Перед программным открытием документов Microsoft Word и Microsoft Excel через COM запрещайте исполнение макросов. Иначе документ может выполнить вредоносный макрос.
Неправильно
Правильно (Word)
Правильно (Excel)
3.¶
Если по прикладной задаче требуется разрешать автозапуск макросов, реализуйте явные настройки безопасности.
Настройки делайте отдельно для клиентского и серверного кода. Варианты настроек:
Запретить автоматический запуск;Разрешить запуск подписанных макросов (рекомендуется)(по умолчанию);Разрешить запуск не подписанных макросов (опасно).
Требования к форме клиентских настроек:
- доступна каждому пользователю;
- настройки хранятся в разрезе пользователей;
- каждый пользователь видит только свои настройки.
Требования к форме серверных настроек:
- доступна только администратору;
- изменяется только администратором.
При программном открытии документов всегда учитывайте выбранные настройки.
3.1.¶
Проверку подписи макросов в документах Microsoft Word можно реализовать так:
Пример (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)
ОбъектExcel = Новый COMОбъект("Excel.Application");
ИсходныйУровеньБезопасности = ОбъектExcel.AutomationSecurity;
ОбъектExcel.AutomationSecurity = 3; // msoAutomationSecurityForceDisable = 3
Документ = ОбъектExcel.Workbooks.Open(ФайлДокумента);
ОбъектExcel.AutomationSecurity = ИсходныйУровеньБезопасности;
Если Документ.VBASigned Тогда
Документ.Close();
Документ = ОбъектExcel.Workbooks.Open(ФайлДокумента);
Иначе
Документ.Close();
ВызватьИсключение НСтр("ru = 'Документ не подписан. Открытие отменено.'");
КонецЕсли;