我想在我的网络应用程序中防止XSS攻击,所以我想在将数据保存到数据库之前将表格中的用户输入的数据转义为在另一个JSP页面中显示,我在两种方法之间犹豫不决:
StringEscapeUtils.escapeHtml()
,输入 REGGAETON / SALSA 的结果与我相同,
但是对于ESAPI.encoder().encodeForHTML()
,对于相同的输入,输出将是 REGGAETON& #X2F; SALSA
答案 0 :(得分:4)
不保存转义数据,在需要显示时将其转义:
逃避它的方式取决于你想要显示它的上下文,所以如果你保存它的转义,它只能在那个上下文中使用,并且大多数时候,转义函数是不是双射的,所以你会丢失信息。
对于对其进行编码以在html上下文中显示的方式,两种方式接缝都是正确的。
此外,为了提高对XSS的保护,你应该研究CSP (内容安全策略),它有很大帮助,特别是对于新项目。
答案 1 :(得分:0)
使用PreparedStatement将数据输入数据库。不要逃避它们,因为这可能会导致丢失原始数据。
在jsp文件中,每当要显示用户输入的值时,您都可以这样做:
<c:out value="${variable}" escapeXml="true"/>