如何测试EL与struts2 OGNL之间存在安全问题



我还有一个与JSP EL和安全问题有关的问题——如何测试这个问题(Struts2标签库中不允许使用JSP表达式,因为安全问题允许黑客使用JSP EL将OGNL注入标签中做坏事)我已经做了很多搜索,但无法创建这样的测试用例。如果您有任何样品测试或想法,请建议

从Struts2.0.9版本起,已经为Struts标记属性禁用了JSTL/JSP表达式语言(EL),这些属性用于评估OGNL。这是一种预防安全漏洞的措施,当属性首先作为JSTL/JSP EL表达式处理,然后结果作为OGNL表达式处理时,可能会发生双重评估。解决方案是直接使用OGNL表达式在Struts标记中表达所有动态属性值。

http://struts.apache.org/release/2.2.x/docs/why-cant-i-use-jstl-style-el-expressions-in-struts-tags.html

这种类型的注射已经不起作用了。如果您想了解它过去是如何工作的,那么为Struts2标记创建一个.tld文件的新副本,并为各种标记的属性启用EL评估。

如上所述,这是一个利用了以下事实的漏洞:EL表达式由JSP/EL引擎处理,之后在标记类内部评估OGNL表达式。

例如,如果Struts2标签允许EL表达式,那么您可能会得到以下结果:

<s:text name="${someVar}"/>

其中someVar是来自传入请求的参数集,它可以计算为任意的OGNL表达式。一旦调用了文本标记,它就会评估OGNL表达式,这可能会产生意想不到的后果。

JIRA票证中有一个更深入的例子:https://issues.apache.org/jira/browse/WW-2107

最新更新