工作流引擎自定义代码和安全性

自定义代码和安全性

流程引擎通过使用Java代码表达语言脚本模板,为自定义流程行为提供了许多扩展点。这些扩展点在流程实施中提供了极大的灵活性,但它们为在不当之手执行恶意操作提供了可能性。因此,建议限制对API的访问,该API仅允许将自定义代码提交给受信任的各方。存在以下允许提交自定义代码(通过Java或REST API)的概念:

1、部署:大多数自定义逻辑是与流程,案例或决策模型的部署一起提交的。例如,在BPMN 2.0 XML中定义了执行监听器调用。

2、查询:查询提供了包含某些参数的表达式的能力(当前仅用于任务查询)。这使用户能够定义可重复使用的查询,这些查询可以重复执行并动态适应不断变化的情况。例如,任务查询taskService.createTaskQuery().dueBeforeExpression(${now()}).list();使用表达式始终返回当前到期的任务。盘古BPM Tasklist任务过滤器的形式使用此功能。

只有受信任的用户才应被授权与这些端点进行交互。下一节概述了如何限制访问。

可信环境中的 盘古BPM

当盘古BPM部署在只有受信任方可以访问系统的环境中(例如,由于防火墙策略),没有受信任方不能访问用于提交自定义代码的API,并且不需要遵循以下建议。

Deployments

部署

通过使用授权基础结构并为可能不受信任的方可能访问的任何端点激活身份验证检查,可以限制对执行部署的访问。进行部署的关键权限是Deployment/Create。不信任的用户不应被授予此权限。

查询

查询访问通常不能通过授权来限制。而是将查询结果简化为有权访问用户的实体。因此,授权权限不能用于保护查询中的表达式求值。

流程引擎配置提供了两个标志来切换即席和存储查询中的表达式求值。查询是直接提交的查询。例如,taskService.createTaskQuery().list();创建并执行临时查询。相反,存储的查询与过滤器一起保留并在执行过滤器时执行。在即席查询表达式可以通过设置配置属性被禁止enableExpressionsInAdhocQueries到false。因此,该属性enableExpressionsInStoredQueries禁用存储的查询中的表达式。如果在禁用表达式评估的情况下使用了表达式,则处理引擎会在评估任何表达式之前引发异常,从而防止执行恶意代码。

存在以下配置组合:

1、enableExpressionsInAdhocQueries= true,enableExpressionsInStoredQueries= true:为任何查询启用了表达式求值。如果所有用户都受信任,请使用此设置。

2、enableExpressionsInAdhocQueries= false,enableExpressionsInStoredQueries= true:默认设置。临时查询可能不使用表达式,但是可以定义和执行带有表达式的过滤器。可以通过授予授权权限来限制对过滤器创建的访问Filter/Create。如果所有授权创建过滤器的用户都受信任,请使用此设置。

3、enableExpressionsInAdhocQueries= false,enableExpressionsInStoredQueries= false:所有查询均禁用表达式。如果上述设置均不能应用,请使用此设置。

 

 技术支持:盘古BPM工作流平台

相关教程