Я также использую библиотеку OWASP ( ESAPI ), чтобы экранировать строки для различных типов отображения, используйте:
String html = ESAPI.encoder().encodeForHTML("hello < how > are 'you'");
String html_attr = ESAPI.encoder().encodeForHTMLAttribute("hello < how > are 'you'");
String js = ESAPI.encoder().encodeForJavaScript("hello < how > are 'you'");
HTML (предположим, JSP)
<tag attr="<%= html_attr %>" onclick="alert('<%= js %>')"><%= html %></tag>
Обновление ( 2017 )
Поскольку кодеры ESAPI считаются устаревшими , была создана и активно поддерживается лучшая альтернатива, поэтому я настоятельно рекомендую использовать вместо нее OWASP Java Encoder .
Если ваш проект уже использует ESAPI
, была добавлена интеграция , которая позволит вам использовать эту библиотеку вместо кодирования.
Использование объяснено на их вики-странице , но для завершенности вы можете использовать его для контекстного кодирования ваших данных:
// HTML Context
String html = Encoder.forHtml("u<ntrus>te'd'");
// HTML Attribute Context
String htmlAttr = Encoder.forHtmlAttribute("u<ntrus>te'd'");
// Javascript Attribute Context
String jsAttr = Encoder.forJavaScriptAttribute("u<ntrus>te'd'");
HTML (предположим, JSP)
<div data-attr="<%= htmlAttr %>" onclick="alert('<%= jsAttr %>')">
<%= html %>
</div>
PS: существует больше контекстов, которые поддерживаются библиотекой