我很乐意为我提供一套明确的准则或规则来处理转义字符串。我用于转义字符串的是apache commons-lang- xxjar库。具体来说就是StringEscapeUtils.escapeHtml(String toEscape)方法。
StringEscapeUtils.escapeHtml(String toEscape)
我需要知道:
(1)在JSP页面或Servlet中,最好在哪里转义字符串?
(2)您如何推荐JSTL中的StringEscapeUtils.escapeHtml(..)或
(3)处理多行字符串更好,最好直接在字符串中使用或\ n和nl2br()方法:
String strError = "Invalid username.\nPlease try again.";
要么
String strError = "Invalid username.<br>Please try again.";
(4)我将如何转义接收通配符的字符串,例如:
String strError = "Invalid user [%s].<br>Please specify another user."
(5)由于javascript转义字符不同。我应该使用什么来转义将在JSP页面的javascript部分内呈现的Java字符串(例如var name = "<%=javaStringHoldingName%>")。
var name = "<%=javaStringHoldingName%>"
您只需要在可能会造成伤害的地方完全避开它即可。在这种情况下,它就在视图中。当用户控制的HTML插入视图中的所有HTML中时,可能会造成伤害。这是XSS的来源。
在设计良好的JSP页面中(阅读:_no_scriptlets,JSTL为您提供了逃脱HTML/XML的<c:out>标记和fn:escapeXml()功能。
<c:out>
fn:escapeXml()
<c:out value="${param.foo}" /> <input type="text" name="foo" value="${fn:escapeXml(param.foo)}" />