【问题标题】:Prevent getText() evaluating EL expressions防止 getText() 评估 EL 表达式
【发布时间】:2015-08-14 11:02:10
【问题描述】:

在 Struts2 后端,我有一个动作类实例变量,例如:keyName。返回到视图(JSP)的动态键。

这个keyName 变量是使用POST 方法使用请求参数设置的。根据请求参数值,keyName 会有所不同。

在 JSP 中,我使用<s:property value="getText(keyName)" /> 来显示与 keyName 变量给出的键对应的标签。

当我将一个 EL 表达式(例如 ${90-40})发送到 keyName 时,这个表达式正在被评估并导致在 UI 上显示 50。

我们如何避免或防止getText() 进行此类 EL 注入?

除了<s:property value="getText(keyName)" />,还有其他替代方式吗?

【问题讨论】:

    标签: java regex jsp struts2 ognl


    【解决方案1】:

    您可以创建自己的文本提供程序并将其注册到struts.xml

    <constant name="struts.xworkTextProvider" value="com.struts.text.MyTextProvier"/>
    

    现在创建一个扩展TextProviderSupport 的类MyTextProvier 并覆盖getText() 方法。所有方法都采用参数key 作为String,您可以从中替换不需要的字符。然后拨打super.getText()。例如

    public String getText(String key) {
      return super.getText(key.replaceAll("[\\$\\{\\}]", ""));
    }
    

    【讨论】:

      【解决方案2】:

      使用&lt;s:text name="keyName" /&gt;

      http://struts.apache.org/docs/text.html

      【讨论】:

      • 链接已损坏。
      猜你喜欢
      • 2014-06-21
      • 1970-01-01
      • 2012-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多