一尘不染

我应该在哪里转义HTML字符串,JSP页面或Servlet?[重复]

jsp

我很乐意为我提供一套明确的准则或规则来处理转义字符串。我用于转义字符串的是apache commons-lang-
xxjar库。具体来说就是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%>")。


阅读 430

收藏
2020-06-08

共1个答案

一尘不染

您只需要在可能会造成伤害的地方完全避开它即可。在这种情况下,它就在视图中。当用户控制的HTML插入视图中的所有HTML中时,可能会造成伤害。这是XSS的来源。

在设计良好的JSP页面中(阅读:_no_scriptlets,JSTL为您提供了逃脱HTML/XML的<c:out>标记和fn:escapeXml()功能。

<c:out value="${param.foo}" />
<input type="text" name="foo" value="${fn:escapeXml(param.foo)}" />
2020-06-08