Перейти к содержанию
#std775

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

1.

При интеграции со сторонними приложениями через открытые интерфейсы (в частности, COM) отключайте исполнение произвольного кода средствами вызываемого приложения.

2.

Перед программным открытием документов Microsoft Word и Microsoft Excel через COM запрещайте исполнение макросов. Иначе документ может выполнить вредоносный макрос.

Неправильно

ОбъектWord = Новый COMОбъект("Word.Application");
Документ = ОбъектWord.Documents.Open(ИмяФайла);

Правильно (Word)

ОбъектWord = Новый COMОбъект("Word.Application");
ОбъектWord.WordBasic.DisableAutoMacros(1);
Документ = ОбъектWord.Documents.Open(ИмяФайла);

Правильно (Excel)

ОбъектExcel = Новый COMОбъект("Excel.Application");
ОбъектExcel.AutomationSecurity = 3; // msoAutomationSecurityForceDisable = 3
Документ = ОбъектExcel.Workbooks.Open(ИмяФайла);
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 = 'Документ не подписан. Открытие отменено.'");
КонецЕсли;
См. также
Проверки

#acc:536 #acc:537

Источник

https://its.1c.ru/db/v8std#content:775