我可以在scriptlet和JSTL之间传递以转义XML吗?

时间:2018-07-20 13:12:02

标签: java jsp jstl xss

我有一个JSP脚本,它带有GET参数,该参数必须进行XML转义以防止XSS漏洞。由于Java没有内置的XSS转义功能,因此我试图传递给JSTL的fn:escapeXml()并返回到脚本,如下所示:

<%@ (import fn taglib) %>
<%
String var1 = request.getParameter("input");
request.setAttribute("var1",var1);
%>
<c:set var="var1" scope="request" value="${fn:escapeXml(var1)}" />
<%
var1 = request.getAttribute("var1");
%>

当我尝试此操作时,服务器返回有用的“ 500:内部服务器错误”。在整天排除故障之前,我想我会问专家:应该吗?我提供的代码中是否存在明显的错误,还是应该在其他地方查找该问题?谢谢!

1 个答案:

答案 0 :(得分:0)

从概念上讲,所介绍的方法应该有效。错误是变量在通过JSTL传递时不会保留其类型。将它们投射回String可以解决问题:

<%@ (import fn taglib) %>
<%
String var1 = request.getParameter("input");
request.setAttribute("var1",var1);
%>
<c:set var="var1" scope="request" value="${fn:escapeXml(var1)}" />
<%
var1 = (String)request.getAttribute("var1");
%>