2

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

原始输入

" onmouseover=alert() src="

转义 HTML 后变为

" onmouseover=alert() src="

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

test'];}alert();if(true){//

在这种特殊情况下,转义 HTML 没有任何效果。但是,org.apache.commons.lang.StringEscapeUtils 也有一个名为 escapeJavascript(String str) 的方法,它将输入转换为:

test\'];}alert();if(true){\/\/

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

任何帮助将不胜感激!

4

2 回答 2

2

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

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

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

于 2018-06-11T09:48:42.890 回答
-2

您不需要使用escapeJavascript/escapeEcmaScript进行 XSS 保护。将escapeHtml输出添加到您的站点应该是安全的:

"<p>" + escapeHtml(userProvided) + "</p>"

如果你想要类似的东西:

 "<p class='" + userProvided + "'>" 

使其安全变得更加困难,您可能希望使用合法字符/值的白名单(如 regexps: [a-Z], (option1|option2))并丢弃所有意外而不是转义它。

于 2018-06-08T15:04:04.003 回答