1

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

4

1 回答 1

2

从 Struts 版本 2.0.9 开始,JSTL/JSP 表达式语言 (EL) 已被禁用用于评估 OGNL 的 Struts 标记属性。这是针对安全漏洞的预防措施,该漏洞可能是由于属性首先作为 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

于 2013-08-02T19:58:58.957 回答