Есть небольшое веб приложение для обмена сообщениями, вроде форума...
Когда пользователь пишет своё сообщение, то оно попадает в бд, затем другие пользователи могут это сообщение прочесть... В сообщении, которое вводит пользователь, есть возможность менять размер шрифта, цвет и т.д. в результате чего, в базу попадает сообщение в виде: <font color="#ffff00">1231sdasd</font><b style=""><font color="#ffff00">asdasd</font></b>
. При запросе этого сообщения, контроллер его именно в таком виде и отдаёт, затем я его вставляю в страничку с помощью Thymeleaf. Проблема заключается в том, что на страничке отображаются не цветные слова, а сами теги, так как <
и >
автоматический заменяются на <
и >
. Как спастись от замены тегов на спецсимволы?)
Решил вопрос следующим образом:
Полученные сообщения вывожу с помощью <tag th:utext="${myvar}"></tag>
, так как th:utext
не экранирует теги на выходе. А перед записью в базе я проверяю само сообщение небольшой самодельной защитой:
private String xssSecurity(String message) {
char[] chars = message.toCharArray();
boolean closeTag = false;
for (int i = 0, j; i < chars.length; i++) {
char c = chars[i];
if (chars[i] == '<') {
System.out.println(chars.length);
for (j = i; j < chars.length; j++) {
char h = chars[j];
if (chars[j] == ' ' || chars[j] == '>') {
String tag = message.substring(i + 1, j);
System.out.println(tag);
if (tag.matches("/?b") || tag.matches("/?font") || tag.matches("/?i")) {
closeTag = true;
break;
} else {
chars[i] = '•';
break;
}
}
}
}
if (chars[i] == '>') {
if (!closeAccept) {
chars[i] = '·';
} else {
closeTag = false;
}
}
}
return new String(chars).replaceAll("·", ">").replaceAll("•", "<");
}
В итоге я получаю сообщение со всеми экранированными тегами, кроме разрешенных(в моём случае это b
, i
и font
).
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Задам мб глупый вопрос, но все же как проверить поля с помощью рефлексии и если поля написаны не правильно либо пустые выбрасывало исключения
Имеется задача на шифрование, где каждый из входящих в строку символов английского алфавита надо заменить на его "зеркальный", те
Верно ли утверждение, что абстрактные классы используются для агрегации общих свойств объектов, а интерфейсы для общих функциональных возможностей?
Возник такой вопрос, почему командная строка использует версию 18, и как ее поменять? Я понимаю, что из-за того, что наша java до 8-го пакета включительно...