我在下面的行中遇到了验证码问题
<input type = "hidden" name = "studentName" value = "<%=viewBean.getStudName()%>">
问题出现在<%=viewBean.getStudName()%>
这里,报告的问题是“网页中与脚本相关的 HTML 标记的不正确中和(基本 XSS)。我已经尝试了 cwe.mitre.org 中给出的修复,但我无法正确应用它。任何人都可以帮助解决这个问题?
利用
<c:out value=${viewBean.studName}/>
相反,它逃脱了XML
在jsp中包含以下jstl taglib
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
并使用
value="${fn:escapeXml(viewBean.getStudName())}"
如果使用 JSTL core <c:out/>
,可以使用escapeXml="true"
来避免 XSS。
<input type = "hidden" name = "studentName" value = "<%=StringEscapeUtils.escapeHtml(viewBean.getStudName())%>">
像这样使用。它现在按照@Jigar Joshi 和@San Krish 的建议工作
根据CWE
,
该软件接收来自上游组件的输入,但它不会中和或错误地中和特殊字符,例如“<”、“>”和“&”,这些字符在发送到下游组件时可能被解释为 Web 脚本元素处理网页。
jstl
您需要转义 html,如果您使用@jigar 建议的标签,则可以完成。
关于 SO 的一些信息将修复错误,
您需要在打印值时使用 html 编码。所以它给出了错误。所以它应该被编码为 value = "<%=ESAPI.encoder().encodeForHtml(viewBean.getStudName())%>">
您需要导入 org.owasp.esapi.ESAPI 和 org.owasp.esapi.Encoder。
这肯定会解决问题..