转义字符以避免Java中的XSS

时间:2018-06-08 14:34:40

标签: javascript java xss apache-stringutils

我需要转义字符以避免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来清理您的输入?另一种方法是用\'替换单引号字符。手动

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:-2)

您不需要使用IEnumerable query = something; if (isTrue) query = query.Take(10); ... / escapeJavascript进行XSS保护。将escapeEcmaScript输出添加到您的网站应该是安全的:

escapeHtml

如果你想要这样的东西:

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

要使其安全起来要困难得多,您可能希望使用合法字符/值的白名单(例如regexps: "<p class='" + userProvided + "'>" [a-Z])并删除所有意外而不是转义它。< / p>