Пользовательский код и безопасность
|
Этот раздел перенесён из документации Camunda 7 и в дальнейшем будет доработан с учётом особенностей OpenBPM Engine |
Процессный движок предоставляет множество точек расширения для настройки поведения процессов с помощью Java-кода, языка выражений, скриптов и шаблонов. Хотя эти точки расширения обеспечивают большую гибкость при реализации процессов, в случае попадания не в те руки они открывают возможность для выполнения вредоносных действий. Поэтому рекомендуется ограничивать доступ к API, позволяющим отправлять пользовательский код, только доверенным сторонам. Ниже перечислены механизмы, с помощью которых можно отправлять пользовательский код (через Java или REST API):
-
Deployment: Большая часть пользовательской логики передается при развертывании модели процесса, кейса или решения. Например, вызов execution listener определяется в XML BPMN 2.0.
-
Queries: Запросы позволяют включать выражения для определенных параметров (в настоящее время только для запросов задач). Это дает пользователям возможность определять повторно используемые запросы, которые можно многократно выполнять и динамически адаптировать к изменяющимся условиям. Например, запрос задач
taskService.createTaskQuery().dueBeforeExpression(${now()}).list();использует выражение, чтобы всегда возвращать задачи, срок выполнения которых уже наступил. OpenBPM Tasklist использует эту возможность в форме фильтров задач.
Право взаимодействовать с этими endpoint’ами следует предоставлять только доверенным пользователям. Способы ограничения доступа описаны в следующих разделах.
OpenBPM Engine в доверенной среде
Если OpenBPM Engine развернут в среде, где доступ к системе имеют только доверенные стороны (например, благодаря политикам межсетевого экрана), то недоверенные лица не смогут получить доступ к API для отправки пользовательского кода, и приведенные ниже рекомендации можно не применять.
Развертывания
Доступ к выполнению развертываний можно ограничить с помощью инфраструктуры авторизации и включения проверок аутентификации для любого endpoint’а, к которому потенциально может получить доступ недоверенная сторона. Ключевое разрешение для выполнения развертываний - Deployment/Create. Недоверенным пользователям не следует выдавать это разрешение.
Запросы
Доступ к запросам в общем случае нельзя ограничить с помощью авторизаций. Вместо этого результат запроса сокращается до сущностей, к которым у пользователя есть доступ. Таким образом, разрешения авторизации нельзя использовать для защиты вычисления выражений в запросах.
Конфигурация процессного движка предоставляет два флага для управления вычислением выражений в adhoc и stored запросах. Adhoc-запросы отправляются напрямую. Например, taskService.createTaskQuery().list(); создает и выполняет adhoc-запрос. Напротив, stored-запрос сохраняется вместе с фильтром и выполняется при выполнении этого фильтра. Выражения в adhoc-запросах можно отключить, установив конфигурационное свойство enableExpressionsInAdhocQueries в false. Аналогично свойство enableExpressionsInStoredQueries отключает выражения в stored-запросах. Если выражение используется при отключенном вычислении выражений, процессный движок выбрасывает исключение до вычисления любого выражения, тем самым предотвращая выполнение вредоносного кода.
Возможны следующие комбинации конфигурации:
-
enableExpressionsInAdhocQueries=true,enableExpressionsInStoredQueries=true: Вычисление выражений включено для любых запросов. Используйте эту настройку, если все пользователи являются доверенными. -
enableExpressionsInAdhocQueries=false,enableExpressionsInStoredQueries=true: Настройка по умолчанию. В adhoc-запросах нельзя использовать выражения, однако можно определять и выполнять фильтры с выражениями. Доступ к созданию фильтров можно ограничить, выдав разрешение авторизацииFilter/Create. Используйте эту настройку, если все пользователи, которым разрешено создавать фильтры, являются доверенными. -
enableExpressionsInAdhocQueries=false,enableExpressionsInStoredQueries=false: Выражения отключены для всех запросов. Используйте эту настройку, если ни одна из перечисленных выше настроек не подходит.
Лицензия и атрибуция
Эта документация была создана на базе материала "Camunda 7 Docs" от Camunda, находится под лицензией Creative Commons Attribution-ShareAlike 3.0 Unported License .
Оригинал документации: https://docs.camunda.org