EL表达式的执行限制及绕过
💡
原文中文,约2100字,阅读约需5分钟。
📝
内容提要
本文探讨了EL表达式的注入及其动态执行特性,分析了如何在JSP中通过反射和JS引擎执行命令。EL表达式被解析为Node节点,利用Ast类进行方法调用和参数处理,最终实现命令执行。同时,学习到EL表达式中的getter方法调用也能获取属性值,增强了对EL表达式的理解。
🎯
关键要点
-
EL表达式的注入利用其动态执行特性,通过反射或JS引擎执行命令。
-
EL表达式解析为Node节点,在JSP中通过proprietaryEvaluate方法解析为ValueExpression。
-
通过AstValue#getValue执行表达式,遍历每个子节点并调用方法。
-
核心执行在ElResolver#invoke方法中,使用BeanELResolver解析器进行反射调用。
-
Node节点AstMapData返回HashMap,AstConcatenation拼接字符串,AstLambdaExpression执行lambda表达式。
-
AstBracketSuffix处理[]中的数据,类似于.的调用方式。
-
EL表达式中的getter方法调用获取属性值,增强对EL表达式的理解。
-
通过param.x传入参数执行命令,getter/setter通过调用对应属性的getter方法获取值。
➡️