Skip to content

Commit 3d0d8de

Browse files
committed
修复QLExpressEngineallowClassSet无效问题(issue#3994@Github)
1 parent 325f5a5 commit 3d0d8de

File tree

2 files changed

+18
-0
lines changed

2 files changed

+18
-0
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
* 【extra 】 `Sftp``reconnectIfTimeout`方法改为捕获所有异常(issue#3989@Github)
1313
* 【core 】 修复`ChineseDate `闰年闰月节日获取问题(issue#ICL1BT@Gitee)
1414
* 【core 】 修复`TreeBuilder`append重复向idTreeMap中put问题(pr#3992@Github)
15+
* 【extra 】 修复`QLExpressEngine`allowClassSet无效问题(issue#3994@Github)
1516

1617
-------------------------------------------------------------------------------------------------------------
1718
# 5.8.39(2025-06-20)

hutool-extra/src/main/java/cn/hutool/extra/expression/engine/qlexpress/QLExpressEngine.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,10 @@
44
import cn.hutool.extra.expression.ExpressionException;
55
import com.ql.util.express.DefaultContext;
66
import com.ql.util.express.ExpressRunner;
7+
import com.ql.util.express.config.QLExpressRunStrategy;
78

9+
import javax.naming.InitialContext;
10+
import java.lang.reflect.Method;
811
import java.util.Collection;
912
import java.util.Map;
1013

@@ -24,10 +27,24 @@ public class QLExpressEngine implements ExpressionEngine {
2427
*/
2528
public QLExpressEngine() {
2629
engine = new ExpressRunner();
30+
31+
// issue#3994@Github
32+
// Enforce blacklisting of high-risk method invocations
33+
QLExpressRunStrategy.setForbidInvokeSecurityRiskMethods(true);
34+
// Explicitly forbid JNDI lookup calls through InitialContext
35+
QLExpressRunStrategy.addSecurityRiskMethod(InitialContext.class, "doLookup");
2736
}
2837

2938
@Override
3039
public Object eval(final String expression, final Map<String, Object> context, Collection<Class<?>> allowClassSet) {
40+
// issue#3994@Github
41+
if (null != allowClassSet) {
42+
for (Class<?> clazz : allowClassSet) {
43+
for (Method method : clazz.getDeclaredMethods()) {
44+
QLExpressRunStrategy.addSecureMethod(clazz, method.getName());
45+
}
46+
}
47+
}
3148
final DefaultContext<String, Object> defaultContext = new DefaultContext<>();
3249
defaultContext.putAll(context);
3350
try {

0 commit comments

Comments
 (0)