转义字符以避免Java中的XSS

问题描述 投票:1回答: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来清理您的输入?另一种方法是用手动替换单引号字符。

任何帮助将不胜感激!

javascript java xss apache-stringutils
2个回答
1
投票

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

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

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


-2
投票

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

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

如果你想要这样的东西:

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

要使它安全起来要困难得多,你可能想要使用合法字符/值的白名单(如regexps:[a-Z](option1|option2))并删除所有意外而不是逃避它。

© www.soinside.com 2019 - 2024. All rights reserved.