Beetl 模板引擎 3.17,10 年来第一次不兼容发版
Beetl作为后台模板引擎,2011年开始,每次修改都调会考虑到兼容性。本次调整是近10年以来第一次不兼容性调整
- 安全漏洞CVE-2024-22533 修复,Beetl默认将不再支持Java直接调用.
- Beetl的安全管理器设置为白名单方式WhiteListNativeSecurityManager,代替DefaultNativeSecurityManager
NATIVE_CALL = FALSE
NATIVE_SECUARTY_MANAGER= org.beetl.core.WhiteListNativeSecurityManager
不兼容回顾:Beetl作为模板语言,支持Java方法和属性的直接调用,并通过安全调用管理器限制一些不安全调用
var array= @java.util.Arrays.asList(1,2,3);//允许
@java.lang.System.exit(1) ; //默认不允许
var list = @myDao.query("select * from xxx") //通过配置不允许
安全管理器用于限制程序员编写”不安全“的代码,包括如上`System.exit`,或者团队禁止直接调用业务方法。使用Beetl作为后台模板语言并不会导致安全漏洞,但如果把模板的编写能力开放给最终用户,即用户可以通过浏览器提交模板内容,那么有可能被黑客攻击,这种攻击类似Fastjson或者Jackson,Struts那样的反序列化漏洞。尽管这是在特定场合出现,但现在一些软件管理系统只要看到开源软件有CVE,公司就禁止使用。 Beetl出现的CVE有如下
- 安全漏洞CVE-2024-22533
- 安全漏洞CVE-2023-30331
- 安全漏洞CVE-2024-22262
如果把编写编译Java代码的能力开放给任意用户,Java语言也有安全漏洞
Maven
<dependency>
<groupId>com.ibeetl</groupId>
<artifactId>beetl</artifactId>
<version>3.17.0.RELEASE</version>
</dependency>
最新模板性能测试,各个模板引擎均采用最新版本, Score 越大越好
Beetl=Enjoy>Rocker>>Freemarker>>Thymeleaf==Velociy
Benchmark Mode Cnt Score Error Units Beetl.benchmark thrpt 5 109547.863 ± 17161.576 ops/s BeetlByte.benchmark thrpt 5 237799.769 ± 5904.514 ops/s Enjoy.benchmark thrpt 5 99695.440 ± 14083.595 ops/s EnjoyByte.benchmark thrpt 5 223874.001 ± 7265.307 ops/s Freemarker.benchmark thrpt 5 41452.634 ± 15917.119 ops/s Handlebars.benchmark thrpt 5 40360.198 ± 24345.048 ops/s Rocker.benchmark thrpt 5 63657.017 ± 4653.265 ops/s Thymeleaf.benchmark thrpt 5 6457.169 ± 272.613 ops/s Velocity.benchmark thrpt 5 8024.042 ± 2097.396 ops/s
最新规则引擎性能测试,Score 越大越好
JfireEL>> Aviator=Beetl=Jexl3 >>Spel>>Mvel=Groovy>>Nashor
Benchmark Mode Cnt Score Error Units Aviator.forExpresss thrpt 5 501413.321 ± 4657.336 ops/s Aviator.ifExpresss thrpt 5 4699456.542 ± 266831.101 ops/s Aviator.simpleExpress thrpt 5 3868701.018 ± 38439.986 ops/s Beetl.forExpresss thrpt 5 1685875.017 ± 28454.020 ops/s Beetl.ifExpresss thrpt 5 4461489.443 ± 78687.317 ops/s Beetl.reflect thrpt 5 62972.088 ± 85785.390 ops/s Beetl.simpleExpress thrpt 5 4328852.130 ± 144586.699 ops/s Groovy.ifExpresss thrpt 5 119493.364 ± 1472.301 ops/s Groovy.simpleExpress thrpt 5 121724.720 ± 1533.726 ops/s Jexl3.forExpresss thrpt 5 789815.632 ± 42390.393 ops/s Jexl3.ifExpresss thrpt 5 4500714.752 ± 138214.400 ops/s Jexl3.simpleExpress thrpt 5 3901843.173 ± 125472.114 ops/s JfireEL.ifExpresss thrpt 5 28337464.920 ± 291859.385 ops/s JfireEL.simpleExpress thrpt 5 18824292.084 ± 103241.504 ops/s Mvel.forExpresss thrpt 5 11954.857 ± 84.105 ops/s Mvel.ifExpresss thrpt 5 230373.242 ± 1827.288 ops/s Mvel.simpleExpress thrpt 5 316083.646 ± 1320.717 ops/s Nashorn.ifExpresss thrpt 5 10010.541 ± 752.057 ops/s Nashorn.simpleExpress thrpt 5 8993.022 ± 518.940 ops/s Spel.ifExpresss thrpt 5 850338.540 ± 41826.542 ops/s Spel.simpleExpress thrpt 5 636251.839 ±