Java 中转义字符以避免 XSS

use*_*449 5 javascript java xss apache-stringutils

我需要转义字符以避免 XSS。我正在使用 org.apache.commons.lang.StringEscapeUtils.escapeHtml(String str),它通过以下方式提供帮助:

原始输入

" onmouseover=alert() src="
Run Code Online (Sandbox Code Playgroud)

转义 HTML 后变成

" onmouseover=alert() src="
Run Code Online (Sandbox Code Playgroud)

但是,在某些情况下,反射的输入会被单引号捕获,例如:

test'];}alert();if(true){//
Run Code Online (Sandbox Code Playgroud)

在这种特殊情况下,转义 HTML 不会产生任何效果。然而,org.apache.commons.lang.StringEscapeUtils 还有一个名为 escapeJavascript(String str) 的方法,它将输入转换为:

test\'];}alert();if(true){\/\/
Run Code Online (Sandbox Code Playgroud)

这里的问题是,你会先转义 HTML 然后转义 Javascript 来清理你的输入吗?另一种方法是手动用 \' 替换单引号字符。

任何帮助将不胜感激!

use*_*449 5

正如 @gabor-lengyel 提到的,我应该能够使用 html 编码器转义单引号。

我遇到的问题是我正在使用它org.apache.commons.lang.stringescapeutils.escapeHtml,并且它无法使用相应的 HTML 实体转义单引号。我现在正在使用org.springframework.web.util.HtmlUtils.htmlEscape,它能够处理双引号和单引号。

再次感谢@gabor-lengyel 的帮助!