Java Regex, меньше и больше, чем знак - PullRequest
5 голосов
/ 13 апреля 2011

У меня есть строка, которую пользователи могут вводить в Интернете, в настоящее время она не защищена от атак XSS.Я хотел бы иметь возможность заменить символы <и>.Обычно известный как «меньше чем», «больше чем», «угловые скобки» и т. Д.

Я уверен, что это задавали миллион раз, но я не могу найти простой ответ.Я предполагаю, что регулярные выражения - это путь вперед, но я не могу понять, как выбирать этих символов.

Ответы [ 4 ]

8 голосов
/ 13 апреля 2011

Вы действительно должны использовать StringEscapeUtils.escapeHtml() из Apache Commons Lang вместо regex для этого. Например. все, что вам нужно сделать, это:

String escaped = StringEscapeUtils.escapeHtml(input);

Лучшая практика для защиты от XSS - избегать всех сущностей HTML, и этот метод обрабатывает эти случаи для вас. В противном случае вы будете писать, тестировать и поддерживать свой собственный код, чтобы сделать то, что уже было сделано. См. OWASP XSS (межсайтовый скриптинг) листок предотвращения для получения более подробной информации.

3 голосов
/ 13 апреля 2011

Java regex не требует специальной обработки угловых скобок. Это должно работать нормально:

myString.replace("<", "less than").replace(">", "greater than");

Надеюсь, это поможет.

-tjw

1 голос
/ 14 апреля 2011

Так как вы пометили этот , я хотел бы добавить, что нормальный подход к экранированию HTML / XML в JSP заключается в использовании тега JSTL <c:out> или fn:escapeXml() функция.

1009 * Е.Г. *

<c:out value="${user.name}" />
<input type="text" name="name" value="${fn:escapeXml(user.name)}" />

Нет необходимости в Apache Commons Lang. Кроме того, экранирование действительно должно выполняться со стороны вида, а не со стороны модели / контроллера.

Смотри также:

1 голос
/ 13 апреля 2011

В качестве альтернативы регулярному выражению, вы можете использовать служебный класс, такой как класс Apache Commons StringEscapeUtils , для кодирования ваших HTML-строк, когда они отправляются обратно на сервер и перед сохранением их в базе данных или повторно. отправив их как вывод.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...