Безопасность программного обеспечения, вызываемого через открытые интерфейсы

#std775

Область применения: управляемое приложение, обычное приложение.

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 = 'Документ не подписан. Открытие отменено.'");
КонецЕсли;

См. также: О параметрах исполнения макросов в Microsoft Excel