Автозамена на спецсимволы

118
23 марта 2021, 11:10

Есть небольшое веб приложение для обмена сообщениями, вроде форума... Когда пользователь пишет своё сообщение, то оно попадает в бд, затем другие пользователи могут это сообщение прочесть... В сообщении, которое вводит пользователь, есть возможность менять размер шрифта, цвет и т.д. в результате чего, в базу попадает сообщение в виде: <font color="#ffff00">1231sdasd</font><b style=""><font color="#ffff00">asdasd</font></b>. При запросе этого сообщения, контроллер его именно в таком виде и отдаёт, затем я его вставляю в страничку с помощью Thymeleaf. Проблема заключается в том, что на страничке отображаются не цветные слова, а сами теги, так как < и > автоматический заменяются на &lt; и &gt;. Как спастись от замены тегов на спецсимволы?)

Answer 1

Решил вопрос следующим образом: Полученные сообщения вывожу с помощью <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("·", "&gt;").replaceAll("•", "&lt;"); }

В итоге я получаю сообщение со всеми экранированными тегами, кроме разрешенных(в моём случае это b, i и font).

READ ALSO
проверка полей Рефлексия Java

проверка полей Рефлексия Java

Задам мб глупый вопрос, но все же как проверить поля с помощью рефлексии и если поля написаны не правильно либо пустые выбрасывало исключения

126
Не работает корректно замена символов в задачке на шифрование с обратным алфавитом

Не работает корректно замена символов в задачке на шифрование с обратным алфавитом

Имеется задача на шифрование, где каждый из входящих в строку символов английского алфавита надо заменить на его "зеркальный", те

107
Верно ли утверждение, что абстрактные классы используются для агрегации общих свойств объектов, а интерфейсы для агрегации общих функц. возможностей?

Верно ли утверждение, что абстрактные классы используются для агрегации общих свойств объектов, а интерфейсы для агрегации общих функц. возможностей?

Верно ли утверждение, что абстрактные классы используются для агрегации общих свойств объектов, а интерфейсы для общих функциональных возможностей?

93
java -version в cmd

java -version в cmd

Возник такой вопрос, почему командная строка использует версию 18, и как ее поменять? Я понимаю, что из-за того, что наша java до 8-го пакета включительно...

148