我可以在 scriptlet 和 JSTL 之间传递以转义 XML 吗?
Can I pass between scriptlet and JSTL to escape XML?
我有一个 JSP 小脚本,它采用必须 XML 转义以防止 XSS 漏洞的 GET 参数。由于 Java 没有内置的 XSS 转义函数,我试图传递给 JSTL 的 fn:escapeXml()
并返回给 scriptlet,如下所示:
<%@ (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");
%>
当我尝试此操作时,服务器 returns 一直有用的“500:内部服务器错误”。在我花一天时间解决这个问题之前,我想问问专家:应该 这个工作吗?我提供的代码中是否存在明显的错误,或者我应该到别处查找问题?谢谢!
从概念上讲,所介绍的方法应该可行。错误是变量在通过 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");
%>
我有一个 JSP 小脚本,它采用必须 XML 转义以防止 XSS 漏洞的 GET 参数。由于 Java 没有内置的 XSS 转义函数,我试图传递给 JSTL 的 fn:escapeXml()
并返回给 scriptlet,如下所示:
<%@ (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");
%>
当我尝试此操作时,服务器 returns 一直有用的“500:内部服务器错误”。在我花一天时间解决这个问题之前,我想问问专家:应该 这个工作吗?我提供的代码中是否存在明显的错误,或者我应该到别处查找问题?谢谢!
从概念上讲,所介绍的方法应该可行。错误是变量在通过 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");
%>