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

问题描述 投票:1回答:1

问题如何在表单中的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足够安全。基于Owasp cheat sheet to prevent xss,应该根据使用值的上下文进行不同的转换 - 在这种情况下属性值。 c:out只对HTML敏感字符进行转义,因此只有这些字符:&<>“'/。

漏洞的一个例子:有人可能会错误地删除属性值周围的字符“或”。页面仍然是有效的HTML并且运行良好。但是如果要插入属性的值是something onclick=alert(1)那么,因为c: out不会逃避任何事情,我们将拥有将在点击时执行javascript的html <input value=something onclick=alert(1) ...

jsp jstl xss owasp esapi
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.