答案 1
我也使用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 (assume jsp)
<tag attr="<%= html_attr %>" onclick="alert('<%= js %>')"><%= html %></tag>
更新 (2017))
由于ESAPI编码器被认为是遗留的,因此已经创建了更好的替代方案并且正在积极维护,我强烈建议使用OWASP Java编码器。
如果您的项目已使用 ,则已添加集成,允许您改用此库进行编码。ESAPI
用法在他们的wiki页面上进行了解释,但为了完成起见,您可以使用它来对数据进行上下文编码:
// 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 (assume jsp)
<div data-attr="<%= htmlAttr %>" onclick="alert('<%= jsAttr %>')">
<%= html %>
</div>
PS:存在更多上下文,并且受库支持
答案 2
我建议你使用Appache Common Lang库来转义字符串,以便exmaple转义HTML:
String escapedString = org.apache.commons.lang.StringEscapeUtils.escapeHtml(String str);
该库有许多有用的方法可以在HTML,XML,Javascript中转义。
推荐