如何防御表单中JSP属性值中存储的XSS

时间:2019-02-19 17:31:02

标签: jsp jstl xss owasp esapi

问题如何防御表格中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。

1 个答案:

答案 0 :(得分:0)

感谢@avgvstvs确认此方法。因此,安全的做法确实是encodeForHTMLAttribute