草庐IT

java - 如何创建安全的 JEXL(脚本)沙箱?

我正在为JEXL脚本创建一个沙箱,以便恶意用户无法访问我们授予他们访问权限的变量之外的数据,也无法对服务器执行DOS攻击。我想为同样这样做的其他人记录下来,并征求其他人对该方法的意见。以下是我所知道的需要解决的问题的列表:只允许使用白名单上的“new”实例化类。不允许访问任何类的getClass方法,因为这样可以调用forName并且可以访问任何类。限制对文件等资源的访问。只允许表达式执行一定的时间,这样我们就可以限制它消耗的资源量。这不适用于JEXL,但可能适用于您正在使用的脚本语言:不允许对象具有自定义的finalize方法,因为finalize方法是从终结器线程调用的,并且将使用

java - 寻找 JEXL 过滤器功能

我知道,我可以在JEXL中做几件事,但在其中找不到Filter功能,这确实非常有用。我怎样才能做类似的事情varx=[{a:11,b=5},{a:1,b=15},{a:12,b=25},{a:4,b=35},{a:7,b=45}];returnx[.a>10].b;//Whichfiltersto{a:11,b=5}&{a:12,b=25}//&hencereturns[5,25] 最佳答案 首先,您的语法是无效的JEXL。我假设你的意思是:varx=[{'a':11,'b':5},{'a':1,'b':15},{'a':12,'b

java - 如何评估沙盒中的用户表达式

我希望我的应用评估来自不受信任用户的表达式,我将从JSON文件中读取该表达式。如:value="(getTime()==60)ANDisFoo('bar')"我在StackOverflow上发现了很多关于此的话题。通常推荐使用Java自带的ScriptEngine类,可以读取JavaScript。或者建议用户使用现有库,例如JEXL、MVEL或此列表中的任何其他库:http://java-source.net/open-source/expression-languages但它们似乎都依赖于受信任的用户(例如:您自己编写的配置文件并想在其中执行一些脚本)。但就我而言,我希望我的表达式评

jexl3动态计算表达式

背景JavaExpressionLanguage(JEXL)是一个表达式语言引擎,可以用来在应用或者框架中使用。JEXL受Velocity和JSP标签库1.1(JSTL)的影响而产生的。需要注意的是,JEXL并不是JSTL中的表达式语言的实现。使用场景实时引擎里动态逻辑计算分离计算逻辑经常变化或者可视化逻辑配置学习实例引入JAR包引入Maven包,我这里使用版本最新版本3.2.1版本号。org.apache.commonscommons-jexl33.2.1第一个实例通过一个用户在商场购买香蕉、苹果来计算总金额为程序计算场景。苹果5.6一斤、香蕉7.2一斤;用户买2斤苹果,3斤香蕉JexlBu

springboot+JXLS+Jexl实现报表模版生成报表

前言做这个项目的思路是由于公司基于自身发展,需要将之前的老项目平台拆解出来,由于之前的项目是所有的功能全部集中在一起,学习成本以及后续的扩展性来说,非常的不友好,并且由于之前设计人员的流失导致了项目无法进一步优化,所以想将其进行拆解,将单个功能模块进行拆分,形成微服务化,使每个功能的业务更加单一,也更加简单经过使用了一段时间的老平台,发现目前公司的平台的一些设计确实非常的好,其中,报表的设计理念比市面上大多的报表工具设计都要好,为什么呢,因为我们公司是基于BtoB的项目模式,所以,客户可能会经常临时性的提出一些报表需求,并且需要响应时间比较快速,所以我们需要一种基于模版即可生成报表的报表工具报