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