【问题标题】:How to defend against stored XSS inside a JSP attribute value in a form如何防御表单中 JSP 属性值中存储的 XSS
【发布时间】:2019-02-19 17:31:01
【问题描述】:

问题如何防范表单中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 不会转义任何东西,我们将拥有 html &lt;input value=something onclick=alert(1) ...,它将在点击时执行 javascript。

【问题讨论】:

  • 您已经在这里回答了自己的问题。是的,您将使用 encodeForHTMLAttribute 正是因为您指定的原因:根据属性,某人可以添加脚本事件。

标签: jsp jstl xss owasp esapi


【解决方案1】:

感谢@avgvstvs 确认此方法。所以安全的方法确实是encodeForHTMLAttribute

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-10-26
    • 2021-03-09
    • 2014-11-14
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 2021-08-04
    相关资源
    最近更新 更多