С целью предотвращения внедрения html-кода и межсайтового скриптинга для сервисных запросов создан фильтр для экранирования некоторых символов с помощью: StringEscapeUtils.escapeHtml(text)
Однако это также экранирует некоторые символы UTF8, такие как äöü. Использование excludeList и преобразование этих значений в их хэш-код перед вызовом StringEscapeUtils.escapeHtml и обратное преобразование хэш-значений в строки после этого вызова решает проблему. Но это не очень элегантное решение!
String[] excludeList = {"ü", "Ü", "ö", "Ö", "ä", "Ä", "ß"};
private static String escapeHtml(String text, String[] exclusionList) {
TreeMap<Integer, String> excludeTempMap = new TreeMap<Integer, String>();
//replace characters from exclusionList in the text with their equivalent hashCode
for(String excludePart : exclusionList) {
Matcher matcher = Pattern.compile(excludePart, Pattern.MULTILINE).matcher(text);
while(matcher.find()) {
String match = matcher.group();
Integer matchHash = match.hashCode();
text = matcher.replaceFirst(String.valueOf(matchHash));
excludeTempMap.put(matchHash, match);
matcher.reset(text);
}
}
//escape malicious html characters
text = StringEscapeUtils.escapeHtml(text);
//replace back characters from exclusionList from hash values to string
for(Map.Entry<Integer, String> excludeEntry : excludeTempMap.entrySet()) {
text = text.replaceAll(
String.valueOf(excludeEntry.getKey()),
excludeEntry.getValue()
);
}
return text;
}
Есть ли у кого-нибудь совет, как добиться этого с помощью лучшего решения? Является ли их лучшей библиотекой, которую можно использовать для внесения в белый список некоторых символов, специфичных для языка?
StringEscapeUtils
? - person Andreas   schedule 28.07.2021