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方法获取值。

➡️

继续阅读