【问题标题】:Can I pass between scriptlet and JSTL to escape XML?我可以在 scriptlet 和 JSTL 之间传递以转义 XML 吗?
【发布时间】:2018-07-20 13:12:01
【问题描述】:

我有一个 JSP scriptlet,它接受 GET 参数,必须对这些参数进行 XML 转义以防止 XSS 漏洞。由于 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");
%>

当我尝试此操作时,服务器会返回非常有用的“500:内部服务器错误”。在我花一天时间解决这个问题之前,我想我会问专家:应该这样做吗?我提供的代码中是否有明显的错误,或者我应该在其他地方寻找问题吗?谢谢!

【问题讨论】:

  • 扔掉 scriptlet 代码,开心就好……
  • 只有当您在浏览器中输出某些内容时,您才需要转义 XML 以防止 XSS。如果你的 var1 变量有一些 HTML,但你只在 Java 代码中使用它而不打印到 JSP,你不需要在那里转义 XML

标签: java jsp jstl xss


【解决方案1】:

从概念上讲,所提出的方法应该可行。错误是变量在通过 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");
%>

【讨论】:

    猜你喜欢
    • 2011-04-03
    • 1970-01-01
    • 2012-02-24
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多