在 JSP 中防止 XSS 攻击

prevent XSS attacks In JSPs

我想在我的网络应用程序中防止 XSS 攻击,所以我想在将用户在表单中输入的数据保存在数据库中以在另一个 JSP 页面中显示之前转义它,并且我我在两种方法之间犹豫不决:

StringEscapeUtils.escapeHtml() ,对于输入 REGGAETON / SALSA 给我相同的结果, 但是对于 ESAPI.encoder().encodeForHTML(),对于相同的输入,输出将是 REGGAETON & #x2f;莎莎酱

不保存转义数据,需要显示的时候转义:

转义的方式取决于你想要显示它的上下文,所以如果你将它转义保存,它将只在那个上下文中可用,而且大部分时间,转义函数不是双射,所以你会丢失信息

对于在 html 上下文 中对其进行编码以显示它的方式 ,两种方式接缝都是正确的。

此外,为了提高对 XSS 的保护,你应该研究 CSP(内容安全策略),它有很大帮助,特别是对于新项目。

使用 PreparedStatement 将数据输入数据库。不要转义它们,因为这可能会导致丢失原始数据。

在 jsp 文件中,每当你想显示用户输入的值时,你可以这样做:

<c:out value="${variable}" escapeXml="true"/>