问题如何防御表格中JSP属性值中存储的XSS?
初始代码类似于
<form ..>
<input value="<c:out value="${name}"/>" type="text" />
</form>
使用c:out:
<input value="<c:out value="${name}"/>" type="text" />
或esapi:encodeForHTMLAttribute?
<%@ taglib prefix="esapi" uri="http://www.owasp.org/index.php/Category:OWASP_Enterprise_Security_API" %>
<input value="<esapi:encodeForHTMLAttribute>${name}</esapi:encodeForHTMLAttribute>" type="text" />
我的第一个想法根据我的阅读,esapi编码是最安全的方式。我认为c:out在编写属性值时不够安全。根据{{3}},转义应根据使用该值的上下文(在这种情况下为属性值)进行不同的处理。 c:out
仅对HTML敏感字符进行转义,因此仅这些字符:&<>“'/。
漏洞示例:可能有人误删除属性值周围的字符“或”。该页面仍将是有效的HTML,并且运行良好。但是,如果要插入属性的值为{{1 }},因为c:out将无法转义任何内容,因此我们将拥有HTML something onclick=alert(1)
,它将在单击时执行javascript。
答案 0 :(得分:0)
感谢@avgvstvs确认此方法。因此,安全的做法确实是encodeForHTMLAttribute