ELResolver转义表达式的所有字符串输出

时间:2010-07-22 15:14:16

标签: java jsp

我有一个现有的Web应用程序,我需要添加针对脚本攻击的保护。为此,我需要在页面上显示之前转义字符串。一种方法是servlet过滤器。我正在探索的另一个是,如果返回的是字符串类型,我可以编写一个ELResolver来逃避任何其他ELresolvers(数组,映射等)的输出吗? 谢谢,

2 个答案:

答案 0 :(得分:2)

有两种方法可以在JSTL的帮助下实现这一目标(如果尚未安装,只需在/WEB-INF/lib文件夹中删除jstl-1.2.jar)。

  1. 使用<c:out> taglib的JSTL core标记。默认情况下,它会转义XML(以及HTML)特殊字符。

    <c:out value="${param.foo}" />
    
  2. 使用fn:escapeXml() taglib的JSTL functions功能。这是<c:out>标签在“引擎盖下”使用的。如果您想要更多XML格式良好的输出和/或不希望使用嵌套在其他标记的属性中的标记来污染您的JSP,那么更有用:

    <input name="foo" value="${fn:escapeXml(param.foo)}">
    
  3. 另见:


    更新:根据您错误发布的更新/评论作为答案:

      

    c:out和fn:escapeXml是显而易见的选择。但我只是懒得试图避免更改多个jsps,如果我可以在一个地方实现相同的目的。

    不,你不能。让这成为下一次从一开始就正确消毒用户控制的输入的教训。

答案 1 :(得分:1)

如何使用JSTL core out标签?核心输出标记默认转义传递的值。