我有一个现有的Web应用程序,我需要添加针对脚本攻击的保护。为此,我需要在页面上显示之前转义字符串。一种方法是servlet过滤器。我正在探索的另一个是,如果返回的是字符串类型,我可以编写一个ELResolver来逃避任何其他ELresolvers(数组,映射等)的输出吗? 谢谢,
答案 0 :(得分:2)
有两种方法可以在JSTL的帮助下实现这一目标(如果尚未安装,只需在/WEB-INF/lib
文件夹中删除jstl-1.2.jar)。
使用<c:out>
taglib的JSTL core标记。默认情况下,它会转义XML(以及HTML)特殊字符。
<c:out value="${param.foo}" />
使用fn:escapeXml()
taglib的JSTL functions功能。这是<c:out>
标签在“引擎盖下”使用的。如果您想要更多XML格式良好的输出和/或不希望使用嵌套在其他标记的属性中的标记来污染您的JSP,那么更有用:
<input name="foo" value="${fn:escapeXml(param.foo)}">
更新:根据您错误发布的更新/评论作为答案:
不,你不能。让这成为下一次从一开始就正确消毒用户控制的输入的教训。c:out和fn:escapeXml是显而易见的选择。但我只是懒得试图避免更改多个jsps,如果我可以在一个地方实现相同的目的。
答案 1 :(得分:1)
如何使用JSTL core out标签?核心输出标记默认转义传递的值。