我需要转义字符以避免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来清理您的输入?另一种方法是用\'替换单引号字符。手动
任何帮助将不胜感激!
答案 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>